web-dev-qa-db-ja.com

Python CRC8の計算

PythonでCRC8を計算したいバイトがいくつかあります。

私はそのような経験はありませんが、私のデバイスの技術仕様から、この計算は0x07多項式と0x00初期化で行う必要があることを知っています。

ユースケースを見てみましょう。最後のバイトがCRCであることがわかっているバイトのリストを受け取りました。

0x00 0x11 0x23 0x32 0x1C 0xAC 0x23 0x3F 0x25 0x47 0x3D 0xB7 0xE2 0xC5 0x6D 0xB5 0xDF 0xFB 0x48 0xD2 0xB0 0x60 0xD0 0xF5 0xA7 0x10 0x96 0xE0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xC5 0x8A

では、0x8Aに対応するかどうかを確認するために、自分の側でCRCを計算するにはどうすればよいですか?

私はいくつかの調査を行い、さまざまなpythonモジュール crcmodcrc8libscrc など)を試しましたが、それらを機能させることができません:コンソールでMemoryErrorエラーが発生することがあります!

私も次のコードで試しましたが、正しいCRC(0x8a)であると私が思うものを返さないようです:

import crc8
hash = crc8.crc8()
hash.update("0x001123321CAC233F25473DB7E2C56DB5DFFB48D2B060D0F5A71096E00000000000000000C58A".encode('utf-8'))
print( hash.hexdigest() )

私が間違っているのは何ですか?

私を助けてくれる人はいますか?計算に使用できるコードスニペットを投稿するのではないでしょうか。

しかし、どんな助けでもありがたいです!サポートありがとうございます...

5
orestino

0x8aは標準のCRC-8に対応します。

width=8  poly=0x07  init=0x00  refin=false  refout=false  xorout=0x00  check=0xf4  residue=0x00  name="CRC-8"

リンクしたPython crc8は、まさにあなたが望むことをします。

例(in Python 3):

hash.update(b'\x00\x11\x23\x32\x1C\xAC\x23\x3F\x25\x47\x3D\xB7\xE2\xC5\x6D\xB5\xDF\xFB\x48\xD2\xB0\x60\xD0\xF5\xA7\x10\x96\xE0\x00\x00\x00\x00\x00\x00\x00\x00\xC5')
print(hash.hexdigest())

与える:

8a

データに8aを含めると、結果はゼロになります。

3
Mark Adler

crc8をインポートします

hash = crc8.crc8()hash.update( "001123321CAC233F25473DB7E2C56DB5DFFB48D2B060D0F5A71096E00000000000000000C5" .decode( "hex"))print(hash.hexdigest())

8a

0
soll soll