Sno*_*wBG 4 python python-3.x crc16
我在使用CRCMOD库获取CCITT CRC16检查的Python 3.4中编写代码时遇到问题。
那就是我的字符串:
a731986b1500087f9206e82e3829fe8bcffed5555efd00a100980000010000000100000009010013bb1d001e287107009b3000000300000088330000f427500077026309
Run Code Online (Sandbox Code Playgroud)
指定的crc值为1d7f
我的代码:
import crcmod
crc16 = crcmod.mkCrcFun(0x11021, 0x1d0f, False, 0x0000)
hex(crc16(b'a731986b1500087f9206e82e3829fe8bcffed5555efd00a100980000010000000100000009010013bb1d001e287107009b3000000300000088330000f427500077026309'))
Run Code Online (Sandbox Code Playgroud)
返回:7d67
我究竟做错了什么?
您首先需要将数据从其十六进制表示形式转换为二进制形式。您还需要使用正确的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()
Run Code Online (Sandbox Code Playgroud)
输出7F1D(这是您期望的,但字节反转了)