私はCRC32計算に頭を悩ませようとしてきましたが、あまり成功していません。得られると思われる値は、得られるべきものと一致しません。
Python にはこれらのチェックサムを生成できるライブラリ (つまり、zlib と binascii) があることは承知していますが、micropython には CRC 機能が存在しないため、それらを使用できる余裕はありません。
これまでのところ、次のコードがあります。
import binascii
import zlib
from array import array
poly = 0xEDB88320
table = array('L')
for byte in range(256):
crc = 0
for bit in range(8):
if (byte ^ crc) & 1:
crc = (crc >> 1) ^ poly
else:
crc >>= 1
byte >>= 1
table.append(crc)
def crc32(string):
value = 0xffffffffL
for ch in string:
value = table[(ord(ch) ^ value) & 0x000000ffL] ^ (value >> 8)
return value
teststring = "test"
print "binascii calc: 0x%08x" % (binascii.crc32(teststring) & 0xffffffff)
print "zlib calc: 0x%08x" % (zlib.crc32(teststring) & 0xffffffff)
print "my calc: 0x%08x" % (crc32(teststring))
次に、次の出力を取得します。
binascii calc: 0xd87f7e0c
zlib calc: 0xd87f7e0c
my calc: 0x2780810c
binascii と zlib の計算は一致しますが、私の計算は一致しません。ネットで入手可能な例と比較したので、計算されたバイトの表は正しいと思います。したがって、問題は各バイトが計算されるルーチンである必要があります。誰かが私を正しい方向に向けることができますか?
前もって感謝します!