プログラミングの為の数学と算数
■ このスレッドは過去ログ倉庫に格納されています
0478デフォルトの名無しさん
NGNG>例えば8BitのCrcで生成多項式が1+X^3+X^7の場合はどのように
俺も詳しくないのでビット数があってない(8bitならX^8が無い)場合に
どうすれば良いか分からんので1+X^3+X^7+X^8として説明するが
(恐らくX^8がなければ7bitのCRCとするべきなのだと思うが…)
生成多項式から次のように変換する
876543210 ← X^n のnに対応する値
110001001 ← 多項式にX^nが含まれていれば1
求めるCRCは8ビットなので、そのビットの値を無視して数値化し p とする
p = 0x91 (10010001) ← 多項式のX^0に対応するビットを最上位とする
CRCの初期値を0とする
CRC = 0
CRCを取りたいデータをnバイトのデータの配列 s とし
次からの一連(字下げ)の処理をn回繰り返す
CRCの最下位バイトに配列sのnバイト目のデータの値をxorする
CRC = CRC ^ s[n]
次からの一連(字下げ)の処理を(1バイト内の)bit回繰り返す
CRCの最下位ビットの値をflagとしCRCを1ビットシフトする
flag = CRC & 1 ← 最下位ビットを取っておく
CRC = CRC >> 1 ← そのビットをシフトして消す
flagが1ならCRCにpをxorする
CRC = CRC ^ p
■ このスレッドは過去ログ倉庫に格納されています