python 中二进制 string/binary 数据的 CRC32

CRC32 of binary string/binary data in python

我想获取包含二进制数据的字符串的 CRC32。 我试着用这样的想法:

binascii.crc32(binascii.a2b_uu(my_binary_string))

但是对于较大的字符串它经常会抛出异常。 我的二进制字符串的示例内容:

my_binary_string = "0100101010..."

可能真的很长。 我该怎么做?

对于python 3 python3 中的二进制文件应该是 b'10001',应该以 bB 为前缀来表示字节文字:

In [11]: a=b'10000011110'

In [17]: hex(binascii.crc32(a))
Out[17]: '0xfc8e2013'

Ajay 的回答不正确,因为它将二进制数据视为文字字符串 - 每个 1 或 0 都被编码为一个单独的字节。

假设您的数据是 UTF-8 编码的二进制数据,或者只是连接成一个长字符串的字节,您应该改为执行以下操作:

import binascii
data = '0110100001100101011011000110110001101111' # 'hello' encoded in UTF-8
int_arr = [int(data[i:i+8], 2) for i in range(0, len(data), 8)] # split the data into 8-bit chunks
print(hex(binascii.crc32(bytes(int_arr))))

# output = 0x3610a686

这将正确编码字符串的每 8 位。