Как вычислить 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