如何在字节数组上正确使用 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
我有一个十六进制数组,但总是被 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