- ベストアンサー
CRC計算方法
CRCの生成多項式によるmodulo2計算等については一通り調べて理解したつもりですが、実装するとなるとどうしたものかと止まってしまいます。 実装の要求が 「何バイトあるか不明なデータのCRCを計算する」 (CRC-16にて) です。 どなたかお知恵を拝借できないものでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>何バイトあるか不明なデータ 何バイトであってもいいですが、上限値は決めないと実装 出来ませんね。 それとCRCはバイト単位でなくビット単位で扱います。 3ビットのデータとか49ビットのデータも許されます。 元のデータが何桁有っても余りが16ビット以下になる までモジュロ2演算を続ければいいのです。 ただ16ビット単位で1ビットずつずらしながらモジュロ演算するので データ配列をそのままバイトで持つか、1バイトを8バイトに ばらすかが考えどころです。
その他の回答 (1)
- ymmasayan
- ベストアンサー率30% (2593/8599)
回答No.2
お礼を頂きましたがちょっと誤解があるような気がしたので補足します。 >1.1バイト取り出す >2.ビットシフトしながらXORを8回繰り返す >3.データがまだあれば結果とXORして1へ戻る >の単純な「バイト毎」にしました。 ビット単位という意味が二つあります。 データのビット数がビット単位という意味と処理がビット単位という意味で す。 データ数をバイト単位という制限をつけても処理はあくまでもバイト単位でな く ビット単位で行う必要があります。 複数バイトをつなげてシフトしないと答えが違ってしまう可能性が有ります。 結構めんどくさいアルゴリズムになりますので机上での筆算をよくながめて 編み出してください。ご提示のアルゴリズムでは(ん?)という感じです。 がんばってください。
お礼
「ビット単位での計算」の実装は大変ですねぇ(笑)。 アルゴリズムとしては 1.1バイト取り出す 2.ビットシフトしながらXORを8回繰り返す 3.データがまだあれば結果とXORして1へ戻る の単純な「バイト毎」にしました。 丁寧な説明ありがとうございます。