shado2001の日記: あさがお日記 このファイルのCRCは 64100000です。
いやはや、たかがCRC32を計算しなおすのに
教科書に頼らず、エイヤッと始めたら、しっかりと罠にかかり
3日間も、のたうちまわりました。焼きなおしが必要です。
チョット見なおしてみると罠は以下でした。 恥ずかしい。
1.CRCの真の意味が判らなかった。
つまり、TheNetでのファイル交換上の同一性確認と
特定の数値で割る作業が どうして同一性が確保できるか判らなかった。
2.エンディアン
(ビットを並べて、バイトやワード化する時の並び方)
まず、フリーソフトのバイナリエディタにあった エンディアン
設定に化かされて誤解した。
ソフト開発やデバッグ時のバイナリファイルの見え方と
実際のメモリの扱いに悩んだ 嶋さんのバカ
3.真の計算域の誤り
計算すべきファイルが50バイトとすると
メモリ上に Addr=k からk+49 確保していたが
よくよく見ると k+1 からk+49+1+CRCの内容バイトまで
無条件に計算していた。本当は以下であるはず
3.1.crcを計算するときには kからk+49
3.2.crcが正しいか判断するには
ファイルのお尻に続いてCRCの内容を並べて
CRCまで含めて計算すると00000000になる
だが、3.2.の計算の時ばかり考えていて
CRC32の4バイト分の00hを3.1.の計算時も
含めてしていた。
結果としていつまでも 計算が合わなかった。
4.CRCの出力フォームには 4つの設定があった
初期値 all 0 all 1
入力時 MSBから LSBから
結果出力時 MSBから LSBから
出力結果 正論理 負論理
あさがお日記 このファイルのCRCは 64100000です。 More ログイン