Python中的CRC,小端字节序
我需要计算一个二进制文件的CRC校验和。这个文件里也包含了CRC值,通过比较,我可以发现文件是否被损坏。
这个二进制文件的内容就像一串很长的十六进制字符串。
00200020 595A0008 ......
但是文件中的CRC是根据一个整数(4个字节,采用小端格式)计算出来的,计算方式是这样的:
1.int - 0x20002000
2.int - 0x8000A559
我该如何在Python中得到相同的结果,而不需要转换字节顺序呢?我试过了http://www.tty1.net/pycrc/,并且在反射方面做了一些尝试,但我得不到相同的结果。
对于这两个字节,正确的CRC值是0xEF2B32F8。
2 个回答
0
我写了以下代码来计算crc8:
acklist = [] # a list of your byte string data
x = 0xff
crc = 0
for i in range(len(acklist)):
crc += int(acklist[i], 16) & x
print(crc)
crc = ~crc
crc += 1
crc1 = crc >> 8 & x
crc2 = crc & x
1
试试使用 struct 模块。你可以打开一个文件,然后用它来读取数据,格式可以随你选择,还可以处理不同的字节序。