Правильная реализация Python crc_hqx (data, value) - PullRequest
0 голосов
/ 05 сентября 2018

Решено! Спасибо, rcgdlr.

Я только что узнал о CRC и не уверен, что моя реализация верна. У меня есть ряд вопросов:

  1. Включаю ли я crc в часть данных (думаю, что да, но я не уверен; может ли это зависеть от реализации)?

bytes_trans = cmd_in [5: -2] # -2 для включения crc или -4 для исключения crc?

  1. Как определить мое начальное значение? Большинство реализаций, которые я видел онлайн, либо использовали 0, либо передавали сам crc. Я пробовал эти два метода:

    crc_start = int.from_bytes (cmd_in [-4: -2], byteorder = 'little', подписано = False) # CRC из сообщения

    crc = binascii.crc_hqx (bytes_trans, crc_start)

    crc2 = binascii.crc_hqx (bytes_trans, 0)

  2. Как узнать, когда это работает? Мне кажется, я ищу 0 или целое число, соответствующее CRC?

  3. До сих пор я не добился успеха, что говорит о том, что я использую неправильные входные данные, или CRC на самом деле не является CCITT CRC-16, как указано в документации, с которой я работаю. Я пробовал большинство реализаций PyCRC, например. ДНР и Кермит, но тоже не повезло. Есть ли способ подтвердить, что я действительно работаю с CCITT CRC-16? Существуют ли факторы, которые могли бы быть реализованы по-другому, делая этот слегка модифицированный CCITT CRC-16?

1 Ответ

0 голосов
/ 06 сентября 2018

Обычно к данным добавляется CRC, в первую очередь старший байт.

Начальное значение зависит от конкретной реализации. Для 16-битного CRC два наиболее распространенных значения - 0x0000 или 0xffff. В некоторых случаях используются другие значения, наиболее распространенные из которых будут эквивалентны начальному значению 0x0000 и генерируются в CRC для двухбайтовой строки данных 0xff, 0xff, как если бы данные были снабжены префиксом двухбайтовой комбинации 0xff , 0xff.

Чтобы проверить реализацию CRC, вы можете сравнить ее с одним из CRC с веб-сайта, такого как:

https://www.lammertbies.nl/comm/info/crc-calculation.html

Использование опции шестнадцатеричного ввода более гибкое. При сравнении реализации не добавляйте рассчитанный CRC к данным при вводе данных в поле ввода веб-сайта.

...