7

私はいくつかのシステムとインターフェースしようとしていますが、その仕様では、シリアル通信用に CRC 16 を計算する必要があります。これはドキュメントからの抜粋です

「標準多項式 X16 +X12 +X5 +1 を利用したメッセージの 16 ビット CCITT CRC。シード値は常に 0 (ゼロ)」

まず第一に、それを行う方法の C# コードのサンプルが 2 ~ 3 つしか見つかりませんでしたが、どれも正しい値を提供していないようです。これを試しました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 ですが、コードでこれを使用しても、間違った答えが得られます。私は何を間違っていますか?

4

1 に答える 1

10

私はそれを考え出した。CRC16-CCITT Kermit 実装を使用する必要がありました。別の多項式を使用しているため、ドキュメントを更新する必要があると思います。

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

于 2013-03-06T13:54:13.940 に答える