2015-06-01 3 views
0

Я хочу получить CRC32 строки, которая содержит двоичные данные. Я пытался использовать somethink так:CRC32 двоичной строки/двоичных данных в python

binascii.crc32(binascii.a2b_uu(my_binary_string)) 

Но часто выбрасывает исключения для больших строк. Пример контента для моей двоичной строки:

my_binary_string = "0100101010..." 

Это может быть очень долго. Как я могу это сделать?

+0

Вам нужен шестнадцатеричный выход справа? – Ajay

+0

Выход хеш-кода в порядке, я думаю, что смогу преобразовать его во все, что мне нужно. – Bouncer00

+0

Какова максимальная длина двоичных данных? – Ajay

ответ

1

ответ Аджай некорректен, так как он обрабатывает двоичные данные в виде символьной строки - каждый 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 ​​битой строку правильно.

1

для Python 3 бинарного файл в Python3 должен быть b'10001', должен начинаться с префиксом b или B для обозначения байта буквальным:

In [11]: a=b'10000011110' 

In [17]: hex(binascii.crc32(a)) 
Out[17]: '0xfc8e2013' 
Смежные вопросы