我試圖與某些系統進行接口,並且在他們的規格中他們需要計算串行通信的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