Python中的CRC,小端字节序

0 投票
2 回答
1883 浏览
提问于 2025-04-16 20:57

我需要计算一个二进制文件的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 模块。你可以打开一个文件,然后用它来读取数据,格式可以随你选择,还可以处理不同的字节序。

撰写回答