CRC в питоне, маленький Endian - PullRequest
0 голосов
/ 06 июля 2011

Мне нужно вычислить контрольную сумму CRC двоичного файла. Это содержимое файла CRC тоже и, сравнивая, я узнаю, когда файл был поврежден.

Bin-файл - это что-то вроде длинной шестнадцатеричной строки

00200020 595A0008 ......

Но CRC в файле рассчитывался на целое число (4 байта с прямым порядком байтов) следующим образом

1.int -  0x20002000
2.int -  0x8000A559

Как получить тот же результат без переключения байтов в python? Я пытался http://www.tty1.net/pycrc/ и играл с отражением, но я не получил тот же результат.

Для этого два байта верны crc 0xEF2B32F8

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Попробуйте использовать модуль struct .Вы можете открыть файл и использовать распакованный файл для чтения данных в любом формате с любым порядком байтов.

0 голосов
/ 01 июня 2018

Я написал следующий код для вычисления crc8:

acklist = [] # a list of your byte string data
x = 0xff
    crc = 0
    for i in range(len(acklist)):
        crc += int(acklist[i], 16) & x

print(crc)

crc = ~crc
crc += 1

crc1 = crc >> 8 & x
crc2 = crc & x
...