我试图根据CRC-16算法使用crcmod Python模块和Python版本的Python解释器来评估适当的校验和。校验参数为:在Python中计算CRC16
- CRC顺序:16
- CRC多项式:0x8005
- Inital值:0xFFFF的
- 终值:0×0000
- 直接:真
代码:
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
,这是正确的(相对于订单)。
看起来您在Python代码中拥有'0x18005'作为多项式,但是您在上面的校验和参数中列出了'0x8005'。 – daveydave400
不,'0x18005'对于'crcmod'是正确的。该包从整个多项式中确定CRC的位数。提供没有高项的CRC多项式是常见的,例如, '0x8005'并单独指定它是一个16位的CRC。 –
首先,您创建了'c16',然后尝试使用'crc16'。你的意思是'c16'?其次,你认为你究竟是在计算CRC的?你知道'str(int(0x5A0001))'返回ASCII数字字符串'5898241',是吗?你输入了什么网络CRC计算器? –