我有一些字节要在 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
Run Code Online (Sandbox Code Playgroud)
现在,我如何计算我方的 CRC 以检查它是否对应于 0x8A?
我进行了一些研究并尝试了不同的 python 模块,如crcmod、crc8和libscrc但我无法使它们工作:有时我MemoryError在控制台上遇到错误!
我也尝试过使用以下代码,但它似乎没有返回我认为正确的 CRC (0x8a):
import crc8
hash = crc8.crc8()
hash.update("0x001123321CAC233F25473DB7E2C56DB5DFFB48D2B060D0F5A71096E00000000000000000C58A".encode('utf-8'))
print( hash.hexdigest() )
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
有没有经验的人可以帮助我?也许发布一段我可以用来进行计算的代码?
但是,任何帮助将不胜感激!非常感谢你的支持...
0x8a 对应于标准的 CRC-8:
width=8 poly=0x07 init=0x00 refin=false refout=false xorout=0x00 check=0xf4 residue=0x00 name="CRC-8"
Run Code Online (Sandbox Code Playgroud)
您链接到的 Python crc8 将完全符合您的要求。
例如(在 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())
Run Code Online (Sandbox Code Playgroud)
给出:
8a
Run Code Online (Sandbox Code Playgroud)
如果8a在数据中包含,则结果为零。