CRC16-CCITT (x.25) Проблемы вычисления контрольной суммы

Я читал о полезном веб-сайте с калькулятором CRC, который описан в других статьях, который прекрасно работает, но, к сожалению, код на языке C не дублирует возможности:
http://www.zorc.breitbandkatze.de/crc.html

Следующая конфигурация требуется для CRC16-CCITT (x.25), формата, с которым я работаю для датчика и поддерживающего электронную сборку:

  • Заказ CRC: 16
  • Полином CRC: 0x11021 [введено как 1021]
  • Начальное значение: 0xffff [введено как ffff]
  • Прямой / Косвенный: Прямой
  • Конечное значение XOR: 0xffff [введено как ffff]
  • Обратные байты данных: True
  • Обратный результат CRC перед финальным XOR: True

Тем не мение, иногда неверный CRC вычисляется с использованием кода C, в частности, но правильно выходит с онлайн-калькулятором

Вы можете найти код C по следующей ссылке, но не забудьте изменить параметры конфигурации в соответствии с приведенным выше:
http://www.zorc.breitbandkatze.de/crctester.c

Вот пример пакета, размещенного в коде C:

const char string[] = { "\x82\x2f\x0a\x40\x00\x00\x7a\x44" };

Это возвращает неправильный CRC «0x1e4e».

и в онлайн калькуляторе:
«% 82% 2f% 0a% 40% 00% 00% 44% 7a»

Который возвращает правильный CRC «0xd831».

Кроме того, вам понадобится пакет, который работает с ОБА онлайн-калькулятором и кодом С, который следует ниже.

В коде C:

const char string[] = { "\x81\x2f\x0b\x4f\xd8\xab\x0d\x42\xed" };

И в онлайн калькуляторе:
«% 81% 2f% 0b% 4f% D8% AB% 0d% 42% изд»

Кто-нибудь знает, почему это происходит, и как код C может быть исправлен, чтобы это исправить?

Спасибо вам большое за помощь!

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …