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モジュール crcmod 、 crc8 、 libscrc など)を試しましたが、それらを機能させることができません:コンソールでMemoryError
エラーが発生することがあります!
私も次のコードで試しましたが、正しいCRC(0x8a)であると私が思うものを返さないようです:
import crc8
hash = crc8.crc8()
hash.update("0x001123321CAC233F25473DB7E2C56DB5DFFB48D2B060D0F5A71096E00000000000000000C58A".encode('utf-8'))
print( hash.hexdigest() )
私が間違っているのは何ですか?
私を助けてくれる人はいますか?計算に使用できるコードスニペットを投稿するのではないでしょうか。
しかし、どんな助けでもありがたいです!サポートありがとうございます...
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
を含めると、結果はゼロになります。
crc8をインポートします
hash = crc8.crc8()hash.update( "001123321CAC233F25473DB7E2C56DB5DFFB48D2B060D0F5A71096E00000000000000000C5" .decode( "hex"))print(hash.hexdigest())
8a