Мое воспоминание (раньше я делал модемный путь назад), когда Кермит обрабатывает бит в каждом байте данных, используя сначала младший бит.
Большинство программных реализаций CRC (возможно, Xmodem) сначала запускают байты данных с самым значительным битом.
При взгляде на источник библиотеки (скачать его из http://www.lammertbies.nl/comm/software/index.html) используется для страницы расчета CRC вы связаны, вы увидите, что XModem использует CRC16-CCITT, многочлен, для которого:
x^16 + x^12 + x^5 + 1 /* the '^' character here represents exponentition, not xor */
полином представлен растрового (обратите внимание, что немного 16 подразумевается)
0x1021 == 0001 0000 0010 0001 binary
реализация Кермит использует:
0x8408 == 1000 0100 0000 1000 binary
, который является тем же растровым изображением, что и XModem, только в обратном порядке.
Текстового файл, который сопровождает библиотека также упоминает следующее значение для Кермита:
Только для CRC-Кермита и CRC-SICK: После обработки все ввода одной в дополнении к CRC вычисляется и два байта CRC меняются местами.
Поэтому, вероятно, будет легко изменить вашу процедуру CRC в соответствии с результатом ПК. Обратите внимание, что источник в библиотеке CRC, похоже, имеет довольно либеральную лицензию - может иметь смысл использовать ее более или менее, как есть (по крайней мере, части, которые применяются для вашего приложения).
Это 90%. Кроме того, глядя на этот код, метод CCITT заменяет байты в контрольной сумме. Было бы проще, если бы код был C ... на самом деле программа ПК находится в LabView, поэтому было не очень легко увидеть, что на самом деле был алгоритм контрольной суммы. Решение состояло в том, чтобы получить еще одну библиотеку CRC, которая рекламировала себя как CCITT, и произвольно отбрасывала байты из микрона в соответствии с ее результатами. – Potatoswatter 2010-12-15 23:52:14
Заметка в текстовом файле о выполнении дополнения CRC для CRC-Kermit и CRC-SICK выглядит как «копия». В том же текстовом файле для CRC-DNP есть примечание, в котором обсуждается требуемая операция дополнения (которая поддерживает теорию «copy typo»). Изучение исходного кода подтверждает, что операция дополнения дополнения применяется только к CRC-DNP, а не к CRC-Kermit и CRC-SICK. – 2016-03-29 19:20:19