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

最初に、データを 16 進数表現から 2 進数に変換する必要があります。また、「xmodem」と思われる正しいCRCアルゴリズムを使用する必要があります-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 に答える