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

时间:2019-05-21 08:40:34

标签: python python-3.x crc32

我应该有一个十六进制数组,但始终被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()方法得到错误,但是然后使用ASCII字符计算了CRC32,这给了我错误的crc。

1 个答案:

答案 0 :(得分:0)

您有一个十六进制数据列表。您可以使用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