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'
,应该以 b
或 B
为前缀来表示字节文字:
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 位。
我想获取包含二进制数据的字符串的 CRC32。 我试着用这样的想法:
binascii.crc32(binascii.a2b_uu(my_binary_string))
但是对于较大的字符串它经常会抛出异常。 我的二进制字符串的示例内容:
my_binary_string = "0100101010..."
可能真的很长。 我该怎么做?
对于python 3
python3 中的二进制文件应该是 b'10001'
,应该以 b
或 B
为前缀来表示字节文字:
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 位。