如何在Python的crcmod库中获取CCITT-CRC16?
我在用Python 3.4写代码的时候,遇到了问题,想用CRCMOD这个库来计算CCITT CRC16的校验值。
这是我的字符串:
a731986b1500087f9206e82e3829fe8bcffed5555efd00a100980000010000000100000009010013bb1d001e287107009b3000000300000088330000f427500077026309
我期望得到的CRC值是 1d7f
这是我的代码:
import crcmod
crc16 = crcmod.mkCrcFun(0x11021, 0x1d0f, False, 0x0000)
hex(crc16(b'a731986b1500087f9206e82e3829fe8bcffed5555efd00a100980000010000000100000009010013bb1d001e287107009b3000000300000088330000f427500077026309'))
但是它返回的是: 7d67
我哪里出错了呢?
1 个回答
7
首先,你需要把数据从十六进制的表示方式转换成二进制。然后,你还需要使用正确的CRC算法,我认为是“xmodem” - crcmod.mkCrcFun(0x11021, 0x0000, False, 0x0000)
import crcmod.predefined
from binascii import unhexlify
s = unhexlify('a731986b1500087f9206e82e3829fe8bcffed5555efd00a100980000010000000100000009010013bb1d001e287107009b3000000300000088330000f427500077026309')
crc16 = crcmod.predefined.Crc('xmodem')
crc16.update(s)
print crc16.hexdigest()
输出结果是7F1D(这正是你预期的结果,不过字节的顺序是反过来的)