4

我在使用 CRCMOD 库在 Python 3.4 中编写代码以获取 CCITT CRC16 检查时遇到问题。

那是我的字符串:

a731986b1500087f9206e82e3829fe8bcffed5555efd00a100980000010000000100000009010013bb1d001e287107009b3000000300000088330000f427500077026309

预期的 crc 值为1d7f

我的代码:

import crcmod

crc16 = crcmod.mkCrcFun(0x11021, 0x1d0f, False, 0x0000)

hex(crc16(b'a731986b1500087f9206e82e3829fe8bcffed5555efd00a100980000010000000100000009010013bb1d001e287107009b3000000300000088330000f427500077026309'))

它返回:7d67

我究竟做错了什么?

4

1 回答 1

6

您首先需要将数据从其十六进制表示转换为二进制。您还需要使用正确的 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(这是您所期望的,但字节颠倒了)

于 2014-06-16T15:14:35.977 回答