如何用多项式x16 + x12 + x5 + 1计算CRC 16

时间:2013-03-06 12:22:10

标签: c# .net serial-port crc crc16

我正在尝试与某些系统接口,并且在他们的规范中,他们需要计算用于串行通信的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, 

然而他们的系统说它应该是

0xC0 0x2F

我的理解是多项式x16 + x12 + x5 + 1 = 0x11021,但即使我在代码中使用它,它仍然给我错误的答案。我做错了什么?

1 个答案:

答案 0 :(得分:10)

我明白了。我不得不使用CRC16-CCITT Kermit实现。我认为他们的文档需要更新,因为它使用不同的多项式。

http://www.sanity-free.com/147/standard_crc16_and_crc16_kermit_implementation_in_csharp.html