Контрольная сумма CRC32 в Python с шестнадцатеричным вводом - PullRequest
4 голосов
/ 05 апреля 2011

Я хочу вычислить контрольную сумму CRC32 для строки шестнадцатеричных значений в python.Я нашел zlib.crc32 (данные) и binascii.crc32 (данные), но во всех примерах, которые я обнаружил с помощью этих функций, в качестве строки есть «данные» (например, «привет»).Я хочу передать шестнадцатеричные значения в качестве данных и найти контрольную сумму.Я попытался установить данные как шестнадцатеричное значение (например, 0x18329a7e), и я получил TypeError: должен быть строкой или буфером, а не int.Функция вычисляет, когда я делаю шестнадцатеричное значение строкой (например, '0x18329a7e'), но я не думаю, что она вычисляет правильную контрольную сумму.Любая помощь будет оценена.Спасибо!

Ответы [ 3 ]

12 голосов
/ 05 апреля 2011

Я думаю, что вы ищете binascii.a2b_hex():

>>> binascii.crc32(binascii.a2b_hex('18329a7e'))
-1357533383
1 голос
/ 05 апреля 2011
>>> import struct,binascii
>>> ncrc = lambda numVal: binascii.crc32(struct.pack('!I', numVal))
>>> ncrc(0x18329a7e)
-1357533383
0 голосов
/ 05 апреля 2011

Попробуйте преобразовать список шестнадцатеричных значений в строку:

t = ['\x18', '\x32', '\x9a', '\x7e']
chksum = binascii.crc32(str(t))
...