我用android/java写了一个checksum计算函数。功能如下
void CalculateCheckSum( byte[] bytes ){
short CheckSum = 0, i = 0;
for( i = 0; i < bytes.length; i++ ){
CheckSum = (short) ((short)CheckSum + (short)bytes[i]);
}
Log.i("Checksum", Integer.toHexString(CheckSum));
}
用于计算校验和的输入值为 0xEF、0x01、0xEF、0x01、0x33、0x0C、0xB8、0xE5、0xFC、0x34、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF、0xFF。我手动计算了校验和值,结果是 0xCE4。使用上述功能时,我得到的答案是 0xFFFFFFE4。我的计算是否有错误,如果是,请纠正我。
谢谢
最佳答案
这里的问题是bytes[i]
的(short)
转换。它扩展了标志。您应该将 (short)bytes[i]
更改为 (bytes[i] & 0xff)
。这会给你正确的答案。
与大多数其他答案相反,它与字节溢出无关。您也不必更改数组类型。
关于java - android/java中的校验和计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12364445/