小编use*_*464的帖子

验证CRC校验和是否为零

我过去与CRC-16校验和有过联系,习惯于通过对要验证的文件以及CRC-16本身的2个字节重新计算CRC-16校验和来进行验证。如果结果为零,则文件完整性有效,否则无效。

可以像下面的伪C一样非常有效地进行编码:

if (recalculated_crc16_checksum != 0) // Error: file integrity is corrupt else // Success: file integrity is valid

我最近想使用CRC-32校验和进行文件完整性检查,并尝试以相同的方式进行验证,但似乎这里“ Compare-Against-Zero-Trick”是不可能的?

例如,如果我在CRC在线计算器上使用32位值0xDEADBEEF:

CRC-16-Modbus(0xDEADBEEF) = 0xC19B (Same input value but with appended checksum 0xC19B in reversed byte ordering) CRC-16-Modbus(0xDEADBEEF9BC1) = 0x0000

但:

CRC-32(0xDEADBEEF) = 0x7C9CA35A (I tried both: big and little endian byte ordering for the appended checksum) CRC-32(0xDEADBEEF7C9CA35A) = 0x01F92292 != 0x00000000 CRC-32(0xDEADBEEF5AA39C7C) = 0x2144DF1C != 0x00000000

有人可以向我解释一下,为什么此“ Compare-Against-Zero-Trick”不适用于CRC-32吗?

c crc32 checksum crc crc16

1
推荐指数
1
解决办法
121
查看次数

标签 统计

c ×1

checksum ×1

crc ×1

crc16 ×1

crc32 ×1