私の思い出し(私は以前モデムをやっていましたが)は、Kermitが最下位ビットを使ってデータの各バイトのビットを最初に処理するということです。
ほとんどのソフトウェアCRC実装(Xmodem、おそらく)は、データバイトの最上位ビットを最初に実行します。
あなたがにリンクされているCRC計算ページに使用(http://www.lammertbies.nl/comm/software/index.htmlからダウンロード)ライブラリのソースを見てみると、あなたはのXModemは、CRC16-CCITT、ある多項式使用していることがわかります:
x^16 + x^12 + x^5 + 1 /* the '^' character here represents exponentition, not xor */
は、多項式は、ビットマップ(16暗示されるビット注)
0x1021 == 0001 0000 0010 0001 binary
カーミットの実装で使用することによって表される。
0x8408 == 1000 0100 0000 1000 binary
これはXModemのものと同じビットマップで、逆しかありません。
ライブラリはまた、カーミットのため、以下の違いに言及付属のテキストファイル:のみCRC-カーミットとCRC-SICKため
:すべての入力処理の後、CRCの1の補数を計算しているが2バイトのCRCが入れ替えられます。
したがって、PCの結果と一致するようにCRCルーチンを変更するのは簡単でしょう。 CRCライブラリのソースにはかなり自由なライセンスがあるように見えますが、それは多かれ少なかれ(少なくともアプリケーションに適用される部分)を使用するのが理にかなっています。
優れた研究! – Potatoswatter
あなたのリンクには、上記の情報に基づいてルックアップテーブルを生成することができます。それはどうやってできますか?また、フレーズ "逆"を使用している方法と、この記事で使用している方法との間には何らかの相関関係がありますか? http://www.danielvik.com/2010/10/calculating-reverse-crc.html彼はすべてルックアップテーブルのアプローチで実装されているので、もしあれば違い/共通点を見るのに苦労しています。ありがとう。 – NickHalden
@NickHalden NO - その記事は、非常に奇妙なことをしています。これはあなたが望むものである可能性は非常に低いです。 CRCが何らかの価値をもって出てくるように、何にテキストを追加すべきかを計算しています。 //上記のコードを使用してルックアップテーブルを生成し、同じロジックがループ内の値0〜255に適用されるように書き直してから、それらの値を保存して後で "内部ループ"の代わりに使用しますcrcアルゴリズム –