Я пытаюсь оценить соответствующую контрольную сумму на основе алгоритма CRC-16, используя crcmod Модуль Python и интерпретатор Python версии 2.7. Параметры контрольной суммы:
- Порядок CRC: 16
- Полином CRC: 0x8005
- Исходное значение: 0xFFFF
- Окончательное значение: 0x0000
- Прямой: Правда
Код:
crc16 = crcmod.mkCrcFun(0x18005, rev=False, initCrc=0xFFFF, xorOut=0x0000)
print hex(crc16(str(int(0x5A0001))))
и для ввода 0x5A0001
он печатает 0x7E16
, а я должен получить что-то вроде 0xCE0A
.
Я проверил на http://www.lokker.net/Java/crc/CRCcalculation2.htm и вычисленное значение равно 0xACE
, что является правильным (относительно порядка).
0x18005
в качестве полинома в коде Python, но вы указали0x8005
в параметрах контрольной суммы выше. - person djhoese   schedule 04.02.20160x18005
правильно дляcrcmod
. Этот пакет определяет количество битов в CRC из полного полинома. Обычно полином CRC предоставляется без старшего члена, например.0x8005
и отдельно указать, что это 16-битная CRC. - person Mark Adler   schedule 05.02.2016c16
, а затем попытались использоватьcrc16
. Вы имели в видуc16
? Во-вторых, как вы думаете, для чего вы вычисляете CRC? Вы знаете, чтоstr(int(0x5A0001))
возвращает строку цифр ASCII5898241
, да? Что вы ввели в веб-калькулятор CRC? - person Mark Adler   schedule 05.02.2016binascii.crc_hqx(data, 0)
: документы здесь - person hoc_age   schedule 24.10.2019