我有这个字节数组,我想计算得到一个 2 字节的校验和。
byte[] b = {(byte) 0x80, (byte) 0x00, (byte) 0x81, (byte) 0x01, (byte) 0x80, (byte) 0x01,(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x74};
校验和应该是(byte) 0x01,(byte) 0xf7
,但是 Java 中的方法将如何实现呢?上面的这个字节数组是 SECS-1 协议的示例标头。我使用for
循环对整数中的所有字节求和,但我得到的结果仅为 0x77,它与 0x01 0xf7 相去甚远。
int sum =0;
for(int b:bytes){
sum ^= b;
}
System.out.println(sum);
我的第二个解决方案是
for (int i = 0; i < bytes.length; i++) {
CheckSum += bytes[i];
}
System.out.println(Integer.toHexString(CheckSum));
但我得到的值是 0xffffeff7,更接近我期望的值。