我正在尝试使用 crcmod Python 模块和 2.7 版本的 Python 解释器评估基于 CRC-16 算法的适当校验和。校验和参数为:
- CRC 顺序:16
- CRC多项式:0x8005
- 初始值:0xFFFF
- 最终值:0x0000
- 直接:真实
代码:
crc16 = crcmod.mkCrcFun(0x18005, rev=False, initCrc=0xFFFF, xorOut=0x0000)
print hex(crc16(str(int(0x5A0001))))
对于输入 0x5A0001
它打印 0x7E16
而我应该得到类似 0xCE0A
的东西。
我检查了 http://www.lokker.net/Java/crc/CRCcalculation2.htm ,计算值是 0xACE
是正确的(关于顺序)。
原文由 Qrlet 发布,翻译遵循 CC BY-SA 4.0 许可协议
crcmod
工作正常。您没有给它您认为给它的三个字节。您的str(int(0x5A0001))
提供 七个 字节,它们是 ASCII 字符5898241
0x5a0001
到十进制的转换。要将字节
0x5a 0x00 0x01
喂给它,你会改为(作为一种方法):打印
0xace
。