私はいくつかのシステムとインターフェースしようとしていますが、その仕様では、シリアル通信用の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ですが、コードでこれを使用しても、間違った答えが返されます。私は何が間違っているのですか?
私はそれを考え出した。 CRC16-CCITTKermit実装を使用する必要がありました。別の多項式を使用しているため、ドキュメントを更新する必要があると思います。
http://www.sanity-free.com/147/standard_crc16_and_crc16_Kermit_implementation_in_csharp.html