我试图与某些系统进行接口,并且在他们的规格中他们需要计算串行通信的CRC 16。下面是从文档的提取物如何使用多项式计算CRC 16 x16 + x12 + x5 + 1
“利用标准多项式消息的16位CRC CCITT,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,
但是他们的系统说它应该是
0xC0 0x2F
我的理解是,多项式x16 + x12 + x5 + 1 = 0x11021,但是即使我在代码中使用这一个,它仍然给我错误的答案。我究竟做错了什么?
+1'自我Learner' – 2013-03-06 14:02:36
不,这是相同的多项式。 CRC实现使用位反转多项式是很常见的。 0x1021反转为0x8408。有关CRC16-CCITT Kermit CRC的说明,请参见http://reveng.sourceforge.net/crc-catalogue/16.htm#crc.cat.kermit,它记录了反思。 – 2013-03-07 15:53:24
@MarkAdler谢谢 – fenix2222 2013-03-08 00:51:12