在写下面这个校验的时候,某个测试得到的结果是ffffffd9,
debug看到sum是负数。
/**
* 所有字节的八位算术和对256取余
* @param bytes
* @return
*/
public static String checkSum(byte[] bytes) {
int sum = 0;
for (byte b : bytes) {
sum = (sum + b);
}
return String.format("%x", sum % 256);
}
解决办法,加上& 0xff
public static String checkSum(byte[] bytes) {
int sum = 0;
for (byte b : bytes) {
sum = (sum + b & 0xff);
}
return String.format("%x", sum % 256);
}
因为 byte占有一个字节,总共8位,最高位是符号位,取值范围是-128-127,把byte转int结果就是低八位不变(也就是byte),其他位全部都是1,所以出现了0xffffffd9
引用