【问题标题】:How to properly use binascii.crc32 on a byte array如何在字节数组上正确使用 binascii.crc32
【发布时间】:2019-05-21 08:40:33
【问题描述】:

我有一个 Hex 数组,但总是被 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。

【问题讨论】:

    标签: python python-3.x crc32


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 2016-09-03
      相关资源
      最近更新 更多