Как рассчитать полином CRC-CCITT (Kermit)
У меня проблема с CRC. Мое сообщение в шестнадцатеричном формате: 80 00 00 03, а crc - f5 1f. Я думал, что полином 0x1021 (кермит crc-ccitt). Как узнать, какой полином правильный? И как я могу увидеть, если мне нужно, чтобы это было в обратном порядке и если начальное значение 0xffff или 0x0000 или что-то еще? Как я могу вычислить искомый полином? Должен ли я конвертировать 80 00 00 03 и f5 f1 в BIN, а затем разделить оба? Я пытался замолчать себя с прогой месть, но это не удалось. Может быть, потому что у меня есть не все параметры -.-
Я нашел php-функцию ЗДЕСЬ
но это не будет рассчитывать правильную сумму для меня. Может быть, это не CRC-CCITT KERMIT в этой php-функции
1 ответ
0x1ff5
действительно является CRC-CCITT (Kermit) 80 00 00 03
, (По-видимому, он хранится в порядке с прямым порядком байтов в вашем потоке.)
Код PHP, который вы нашли, предназначен для ложного "CRC-CCITT", который вы можете найти в каталоге RevEng здесь.
Истинные параметры CRC-CCITT (Kermit) находятся здесь в этом каталоге. Биты инвертированы, поэтому вы используете инвертированный полином, 0x8408
и вы сдвигаете биты вниз, а не вверх. Начальное содержимое регистра равно нулю, и нет окончательного исключающего-или.