如何在字节数组上正确使用 binascii.crc32

How to properly use binascii.crc32 on a byte array

我有一个十六进制数组,但总是被 binascii.crc32() 视为 'str'。 例如:data = ['aa', 'bb', 'cc'].

这是为了构建框架,以便将其放入特定格式的 Wireshark 可打开的 txt 文件中(不是这里的问题,这工作正常)。

如文档所示: print(binascii.crc32(b"hello world")) 有效。

我尝试使用 bin() 将数据转换为二进制,这给了我

data = ['10101010', '10111011', '11001100']

然而,它从未被视为二进制文件。

我尝试使用 bytes() 方法将其转换,但只能再次将其转换为 ASCII。

def toBin(data):
    data2=[]
    for iBcl in range (1,len(data)):
        if iBcl%2!=0:
            binary=bin(int(data[iBcl-1]+data[iBcl],16))[2:]
            data2.append(binary)
    print(data2)
    return data2

data="aabbcc"
data2=toBin(data)
print(binascii.crc32(data2[0]+data2[1]+data2[2]))

根据在线 CRC32 计算器,结果应该是 0xBE4DF84C 但出现以下错误: TypeError: a bytes-like object is required, not 'str'

我使用 bytes() 方法没有收到错误,但是 CRC32 是根据 ASCII 字符计算的,这给了我不正确的 crc。

您有一个十六进制数据列表。您可以使用 binascii.unhexlify 转换每个字节,然后加入所有:

b = b''.join((binascii.unhexlify(i) for i in data))
print(b)

按预期给予

b'\xaa\xbb\xcc'

你可以控制crc32:

print(hex(binascii.crc32(b)))

给出:

0xbe4df84c