Как вычислить CRC 16 с полиномом x16 + x12 + x5 + 1
Я пытаюсь взаимодействовать с некоторой системой, и в их спецификациях они требуют рассчитать CRC 16 для последовательной связи. Вот выдержка из документации
" 16 бит CCITT CRC сообщения, использующего стандартный полином, X16 +X12 +X5 +1. Начальные значения всегда 0 (ноль)"
прежде всего, я нашел только 2-3 образца кода c# о том, как это сделать, и ни один из них не дает мне правильного значения. Я попробовал это. http://www.sanity-free.com/133/crc_16_ccitt_in_csharp.html, но я не уверен, что установить для начального значения. Я пробовал нули и до сих пор не работает.
данные, которые я тестирую, это:
0x00 0x09 0x10 0x01 0x01 0x7C 0xF4 0xB8 0x00,
значение CRC, которое я получаю
0xF2 0x24,
однако их система говорит, что он должен быть!--4-->
0xC0 0x2F
Я понимаю, что полином x16 + x12 + x5 + 1 = 0x11021, однако даже когда я использую этот в коде, он все равно дает мне неправильно ответ. Что я делаю не так?
1 ответов
Я понял. Мне пришлось использовать CRC16-CCITT Kermit inmplementation. Я думаю, что их документация должна быть обновлена, поскольку она использует другой полином.
http://www.sanity-free.com/147/standard_crc16_and_crc16_kermit_implementation_in_csharp.html