3

私はこの16ビット巡回冗長検査を使用すると言っているデバイスを扱っています:

CCITT CRC-16 with polynomial x^16 + x^12 + x^5 + x^1

私はそのようなアルゴリズムの実装を探しましたが、方程式の最後の項が、ではなく1(つまりx^0)に等しいものだけを見つけました。これは、このx^1アルゴリズムのようです。

どうやって始めたらいいのかわからないことに気づいたとき、自分でアルゴリズムを実装しようとしていました。方程式から始まるCRC計算をどのように開発することになっていますか?

4

2 に答える 2

2

このPDFファイルは主題を説明します:hackersdelight.org/crc.pdf

また、CRCアルゴリズムに関する章があるため、AndrewTanenbaumによるComputerNetworksをお勧めします。

最後に、デバイスが実際に標準のCRCではなくその形式のCRCを実装していることを再確認します。それはタイプミスかもしれません。

于 2013-02-18T12:29:31.700 に答える
1

あなたは正しく、多項式は間違っています。適切なCRC多項式には、常に1つの項が必要です。CCITT CRC-16多項式は、@gugaで示されているようにx^ 16 + x ^ 12 + x ^ 5 + 1、またはビット形式の0x1021(x ^ 16を省略)です。この16ビットCRCのカタログを参照してください。

そこにある情報は、多項式以外に必要な他の重要な情報も提供します。具体的には:

width=16 poly=0x1021 init=0x1d0f refin=false refout=false xorout=0x0000 check=0xe5cc

これは、CRCがビット反射されず、で初期化され0x1d0f、結果が言い訳にならないことを意味します。したがって、バイトなしのCCITTCRCは0x1d0fです。また、ASCII数字の9バイト文字列「123456789」のチェック値も提供します0xe5cc。これを使用して、実装を確認する必要があります。

ロスウィリアムズガイドは、CRCの実装について知っておく必要があるすべてを教えてくれます。

于 2013-02-18T17:27:41.603 に答える