我正试图与一些系统接口,在他们的规格中,他们需要计算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,但我不确定如何设置初始值。我试了0,还是不行。
我正在测试的数据是:
0x00 0x09 0x10 0x01 0x01 0x7C 0xF4 0xB8 0x00,
我得到的CRC值是
0xF2 0x24,
不管他们的系统说它应该是
0xC0 0x2F
我的理解是多项式x16 + x12 + x5 + 1 = 0x11021,然而,即使我在代码中使用这个,它仍然给我错误的答案。我做错了什么?
我明白了。我不得不使用CRC16-CCITT Kermit实现。我认为他们的文档需要更新,因为它使用了不同的多项式。
http://www.sanity-free.com/147/standard_crc16_and_crc16_kermit_implementation_in_csharp.html