• 締切済み

CRCについて

CRCの算出についてなのですが http://www2c.biglobe.ne.jp/~osakana/vc/pc/crc.html こちらのサイトを参考にすると 1. データを一つ(1バイト)とってきます 2. CRC値を左ビットシフトして、桁上がりがあればさらに生成多項式とXORを取ります 3. データを左ビットシフトして、桁上がりがあればCRC値と1のXORを取ります 4. あと7回(1バイト=8ビットなので)2と3を繰り返します 5. 残りのデータがあれば1に戻ります とあります。 例えばアドレス部00000000にデータ01が入っているもの(ファイルサイズ1バイト)を算出しようとした場合 手計算を行うとCRC16は0001、CRC32は00000001になりそうなのですが いくつかのフリーソフトで実際にバイナリエディタを用いて1バイトのファイルを作成し、試して見たところ CRC16が1E0E CRC32がA505DF1B と出ます。 一般的な算出方法では、上記の説明以外に何か別の処理、初期値などがあるのでしょうか? お分かりになる方是非教えてください。 よろしくお願いします。

みんなの回答

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.1

>4. あと7回(1バイト=8ビットなので)2と3を繰り返します の部分を見落としていると思います。 それと、最後にビットを反転しています。

mobit
質問者

補足

一応そこも考慮したうえでそのような計算結果になると思うのですが 1.データ1バイト取得0000 0001 2.1回目 データ:0000 0001 , CRC16:0000 0000 桁上がりなし 3.1回目 データ:0000 0010 , CRC16:0000 0000 桁上がりなし 以降7回目まではデータ部分のみ移動が起きるだけで桁上がりは無し 2.8回目 データ:1000 0000 , CRC16:0000 0000 桁上がりなし 3.8回目 データ:(1) 0000 0000 桁上がりあり CRC16:0000 0000と0000 0001のxorをとる CRC16:0000 0001になる こうなるのではないのでしょうか? またビット反転とのことですが 1111 1110となってもやはり答えとは違うと思うのですが… どこか未だ私に認識違いがあるようです。 引き続きよろしくお願いします。

関連するQ&A