【发布时间】:2021-09-01 07:34:39
【问题描述】:
我正在尝试在 WinHex 程序中实现校验和,在 WinHex 和 010 编辑器中调用它
校验和 Uint 32 位
例如我们计算32byte(以HEX表示)数据的校验和:
1122334455667788991122334455667711223344556677889911223344556677
WinHex 为我们提供了 checksum32 值:
EE65DE86
我在想这只是将每个字节与前一个字节相加:
unsigned char checksum(unsigned char data[]){
unsigned char sum = 0;
int i;
for(i=0; sizeof(data); i++){
sum += data[i];
}
return -sum;
}
我试过了,它给了我错误的校验和。显然不是 crc,可能是 Adler 或 Fletcher 或其他 smh,校验和变化太多,很难找到正确的一个
【问题讨论】:
-
鉴于你的代码使用了
unsigned关键字,我们可以推断你的[c#]标签是错误的吗? -
@Llama 是的,抱歉,修复它
-
This (page 15) 说这只是所有字节的总和,但实际上我也没有得到那个结果。
-
取模运算符,它返回除法的余数。
-
它说的是“a 32 位校验和”,而不是“唯一的 32 位校验和”。 CRC32 也是“a 32 位校验和”