java - 如何用for循环求和字节数组?
问题描述
这行得通!阵列长度为 8
int crc = (bin[1] + bin[2] + bin[3] + bin[4] + bin[5] + bin[6]) & 0Xff;
问题是接收数据长度可能会有所不同。我尝试用循环计算校验和,但我没有得到它的工作。
byte crc = 0;
for (int i = 1; i < bin.length - 2; i++) {
crc += bin[i];
}
int crcI = crc & 0xff;
这通常给出错误的值,但有时它们是正确的
解决方案
本次检查:
i < bin.length - 2
评估为:
i < 8 - 2
IE
i < 6
即要考虑的最后一个元素在 index 处5
,而不是6
.
如果您试图获取除第一个和最后一个字节之外的每个字节的总和,那么您可能应该使用:
for (int i = 1; i < bin.length - 1; i++) {
...
}
或者,将您的<
运算符更改为<=
,如下所示:
for (int i = 1; i <= bin.length - 2; i++) {
...
}
在您在问题中给出的代码中结果可能正确的一个示例是索引处的元素6
(即bin[6]
)是否等于0
(这是因为0
不会对总和做出贡献)。
推荐阅读
- javascript - 使用 jQuery 禁用鼠标按下
- r - R Shiny - 具有相同 id 的多个单选按钮/向单选按钮组添加标头
- php - 在 foreach 循环中将数字递增 1 到 10
- jenkins-pipeline - Jenkinsfile - 匹配多个标签的代理
- swift - 编辑为真或假时更改目标视图控制器
- php - 从平面数组php创建父子
- oop - 是否总是需要在子类中创建新实例才能使用超类的属性?
- java - Eclipse RCP 获取部件实例
- sql - 如何显示部门编号、部门名称和员工编号?
- ruby - 在 Heroku 上找不到用于 Ruby on Rails 的 Selenium 的 Chrome 二进制文件