どのようにしてCRC巡回冗長検査を行いますか
巡回冗長検査(CRC; Cyclic Redundancy Check)とは、データ転送中や格納プロセスにおけるエラーの検出に用いられる、一般的なデータ検証法である。
CRC巡回冗長検査コードを算出するステップは以下の通りです:
一般的には2進数で構成される生成多項式を選択します。生成多項式の選択は採用するCRC規格に依存し、最も広く採用されているCRC-32では生成多項式は0x04C11DB7です。
検証データはバイト単位でデータブロックに分割される。
16/32/64bitレジスタを0xFFFFFFFFで初期化します。
各データチャンクに対して次を行う:
データブロックの先頭バイトとレジスタの最上位バイトをXOR演算し、結果を得る。
結果の最上位をはじき出し(右シフト1)、生成多項式とXORする。
c) bの工程をすべての位置が計算されるまで繰り返します。
レジスタの現在の値を、チェックサムとして使用する。
以下に 1 バイトの CRC-8 チェックサムを計算する例を示します。
多項式を0x1Dで生成するオプションを選択する。
検証するデータを 1 バイトずつバイトブロックに区切る。
8ビットのレジスタを0で初期化します。
各データブロックに対して、以下を実行します。
データブロックの最初のバイトをレジスタと排他的論理和で組み合わせて、結果を取得する。
b)結果の一番上の桁を繰り出す(つまり1桁右へずらします)。
結果の最下位ビットが 1 の場合は生成多項式 0x1D と排他的論理和を取る。
d) bとcの手順を繰り返す。全てのビットに対する計算が完了するまで。
レジスタの現在の値を、チェックサムとする。
注意: 生成多項式の選択とデータブロックの分割方法は、具体的なアプリケーションのシーンと基準によって異なります。上記の例示は単なる簡単な例示です。実際のアプリケーションでは、具体的な要求と基準に基づいて生成多項式と分割方法を選択する必要があります。