32 位整数的校验和
Checksum for a 32-bit integer
我正在尝试找出如何对 32 位整数(4 字节)进行校验和。
它应该可靠地检测数字中的错误,并且尽可能容易计算。
想法:
(bytes: a,b,c,d)
cksum = (((a xor b) xor c) xor d)
cksum = (((a / b) / c) / d)
这是否适用于简单的检查,还是我应该尝试实施更多 "mainstream" 的东西,例如 adler 或 crc?我只需要检查号码是否正确,而不是修复其中的错误或类似的事情。理想情况下,校验和为 8 位长。
我正在 8051 上的汇编中实现这个
标准校验和是这样工作的:
- 将所有数据字节相加并放下进位,
- 对总和取2的补码
要验证校验和,请添加包括校验和在内的所有数据字节。如果结果不为零,则说明某些数据已损坏。
在 C 中,你可以做到
unsigned char checksum(unsigned char data[]){
unsigned char sum = 0;
int i;
for(i=0; sizeof(data); i++){
sum += data[i];
}
return ~sum + 1;
}
我正在尝试找出如何对 32 位整数(4 字节)进行校验和。
它应该可靠地检测数字中的错误,并且尽可能容易计算。
想法:
(bytes: a,b,c,d)
cksum = (((a xor b) xor c) xor d)
cksum = (((a / b) / c) / d)
这是否适用于简单的检查,还是我应该尝试实施更多 "mainstream" 的东西,例如 adler 或 crc?我只需要检查号码是否正确,而不是修复其中的错误或类似的事情。理想情况下,校验和为 8 位长。
我正在 8051 上的汇编中实现这个
标准校验和是这样工作的:
- 将所有数据字节相加并放下进位,
- 对总和取2的补码
要验证校验和,请添加包括校验和在内的所有数据字节。如果结果不为零,则说明某些数据已损坏。
在 C 中,你可以做到
unsigned char checksum(unsigned char data[]){
unsigned char sum = 0;
int i;
for(i=0; sizeof(data); i++){
sum += data[i];
}
return ~sum + 1;
}