Я пытаюсь оценить соответствующую контрольную сумму на основе CRC-16 алгоритм с использованием crcmod Модуль Python и версия 2.5 интерпретатора Python. Параметры контрольной суммы являются:Расчет CRC16 в Python
- CRC заказ: 16
- CRC полином: 0x8005
- щёток значение: 0xFFFF
- Конечное значение: 0x0000
- Direct: Правда
Код:
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 »в своих параметрах контрольной суммы выше. – daveydave400
Нет, '0x18005' подходит для' crcmod'. Этот пакет определяет количество бит в CRC из полного полинома. Обычно предоставляется полином CRC без высокого срока, например. '0x8005' и отдельно указать, что это 16-разрядный CRC. –
Во-первых, вы создали 'c16', а затем попытались использовать' crc16'. Вы имели в виду 'c16'? Во-вторых, что именно вы думаете, что вы вычисляете CRC? Вы знаете, что 'str (int (0x5A0001))' возвращает строку цифр ASCII '5898241', да? Что вы ввели в калькулятор CRC в Интернете? –