首页 > 解决方案 > 如何用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;

这通常给出错误的值,但有时它们是正确的

标签: java

解决方案


本次检查:

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不会对总和做出贡献)。


推荐阅读