web-dev-qa-db-ja.com

多項式x16 + x12 + x5 +1を使用してCRC16を計算する方法

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

"標準多項式X16 + X12 + X5 + 1を使用するメッセージの16ビットCCITTCRC。Seed値は常に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ですが、コードでこれを使用しても、間違った答えが返されます。私は何が間違っているのですか?

7
fenix2222

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

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

10
fenix2222