- ベストアンサー
CRC8を教えてください
Cにて16ByteデーターをCRC8にかけたいのですがアルゴリズムがよく理解できません。 どなたかプログラムを教えていただけませんでしょうか? また、12Byteのときはプログラムが変わるのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
★CRC8 って初めて聞きました。 ・私は CRC16、CRC32、CRC64、CRC128 なら聞いた事があります。 また、CRC16、CRC32 の計算を行うルーチンも作成した経験がありますが CRC8 は初めてです。 なお、CRC16 の『16』は 16 ビットという意味ですが、CRC8 の 8 も 8 ビットのことですよね。 ・CRC16 の場合は 16 ビット以内のサイズなら同じ数値になる確率がかなり低くなります。 このことから CRC8 では 8 ビット(256バイト)以内のサイズなら同じプログラムでかまわないと 思います。つまり、16 バイトでも 12 バイトでも同じ CRC8 で OK です。 ・『CRC8 計算』キーワードでネット検索すると多数見つかりますね。 検索した情報から CRC 生成多項式は CRC8……X^8 + X^7 + X^2 + 1 CRC16…X^16 + X^12 + X^5 + 1 http://www.sumtak.co.jp/japanese/products/linearencoders/pulscale/futabapdf/fmf.pdf ↑ 6 ページより抜粋 ・CRC8 の実装方法は次のリンクを参考にして下さい。 http://kone.vis.ne.jp/diary/diaryb07.html ↑ 一番下より抜粋すると『CRCの国際標準』として、以下の値がある。 CRC-12 = x12 + x11 + x3 + x2 + x1 + 1 CRC-16 = x16 + x15 + x2 + 1 CRC-32 = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + 1 CRC-CCITT = x16 + x12 + x5 + 1 ・今回は CRC8 ですので CRC8 = X8 + X7 + X2 + 1 CRC8 = 110000101(2進数) となり、0x185 が多項式の値です。でも 8 ビットですので上位の 1 ビットを除いた 0x85 で計算します。 CRC8 の多項式と 0x85 と他の CRC16 などのソースを元にプログラムしてみて下さい。 ・以上。
お礼
ありがとうございます。 CRC16,32は参考書等いろいろ見つかられたのですがCRC8について見つける事が出来なく困っていました。