如何在Python的crcmod库中获取CCITT-CRC16?

4 投票
1 回答
10817 浏览
提问于 2025-04-18 09:56

我在用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(这正是你预期的结果,不过字节的顺序是反过来的)

撰写回答