它是什么校验和,它是如何工作的? [校验和 32 位]
What checksum is it and how does it work? [Checksum 32bit]
我正在尝试通过 WinHex 程序实现校验和,在 WinHex 和 010 编辑器中它被称为
Checksum Uint 32bit
例如我们计算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 其他,它的校验和变化如此之多以至于很难找到正确的
至少这个问题:
sizeof(data)
下面是指针的大小而不是 0 --> 无限循环。
unsigned char checksum(unsigned char data[]){
unsigned char sum = 0;
int i;
for(i=0; sizeof(data); i++){
sum += data[i];
}
return -sum;
}
仅功能 returns 值 0-0xFF,从不为 0xEE65DE86
我找到了解决方案,感谢 Gerhardh,我们需要将 4bytes 转换为 int32 然后总结一下
unsigned int checksum( int data[])
{
unsigned int sum = 0;
int i;
int size;
for(i=0; sizeof(data); i++) {
sum += data[i];
}
return sum;
}
函数好像从来没有returns
这是一个无限循环,或者 crush
i
一直增加直到重叠
另外sizeof(data)
是4,data
是指针
unsigned char checksum(unsigned char data[]){
unsigned char sum = 0;
int i;
for(i=0; sizeof(data); i++){ // equivalent for(i=0; 4; i++), for(i=0; true; i++)
sum += data[i];
}
return -sum;
}
我们还需要data
长度
unsigned char checksum(unsigned char data[], int data_length){ //<-- added data_length
int sum = 0; // <-- int instead of unsigned char
int i;
for(i=0; i<data_length; i++){ // as long as i is less than data_length
sum += data[i];
}
return -sum;
}
我正在尝试通过 WinHex 程序实现校验和,在 WinHex 和 010 编辑器中它被称为
Checksum Uint 32bit
例如我们计算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 其他,它的校验和变化如此之多以至于很难找到正确的
至少这个问题:
sizeof(data)
下面是指针的大小而不是 0 --> 无限循环。
unsigned char checksum(unsigned char data[]){
unsigned char sum = 0;
int i;
for(i=0; sizeof(data); i++){
sum += data[i];
}
return -sum;
}
仅功能 returns 值 0-0xFF,从不为 0xEE65DE86
我找到了解决方案,感谢 Gerhardh,我们需要将 4bytes 转换为 int32 然后总结一下
unsigned int checksum( int data[])
{
unsigned int sum = 0;
int i;
int size;
for(i=0; sizeof(data); i++) {
sum += data[i];
}
return sum;
}
函数好像从来没有returns
这是一个无限循环,或者 crush
i
一直增加直到重叠
另外sizeof(data)
是4,data
是指针
unsigned char checksum(unsigned char data[]){
unsigned char sum = 0;
int i;
for(i=0; sizeof(data); i++){ // equivalent for(i=0; 4; i++), for(i=0; true; i++)
sum += data[i];
}
return -sum;
}
我们还需要data
长度
unsigned char checksum(unsigned char data[], int data_length){ //<-- added data_length
int sum = 0; // <-- int instead of unsigned char
int i;
for(i=0; i<data_length; i++){ // as long as i is less than data_length
sum += data[i];
}
return -sum;
}