CRCコード算出クラス
動作環境:
VisualC++6.0で動作確認
使用許諾:
このコードはフリーウェアとします。自由に使用して頂いて構いません。
CRCコードを算出するクラス。通信データやゲームのセーブデータのチェックをする時に、チェックサムよりもちょっとだけ玄人っぽいです。そんだけ。
大した事してないので、ヘッダだけです。クラス定義の中にコードがかかれてます。
生成多項式はデフォルトでX16+X12+X5+1を使ってます。変えたい人はオブジェクト生成時の引数で変えられます。
ダウンロード
リファレンス
CRCCalc::CRCCalc( unsigned short polynominal=0x8408 )
CRCコード算出クラスを構築して初期化します。
引数
polynominal 生成多項式を指定します。
void CRCCalc::init( void )
CRCコード算出クラスを初期化します。
unsigned short CRCCalc::get_crc( void )
CRCコードを取得します。受信側CRCチェック用。結果が0ならチェックOK。
引数
無し
戻り値
CRCコード
void CRCCalc::get_crc( unsigned char crccode[2] )
CRCコードを取得します。送信側CRCコード算出結果取得用
引数
crccode CRCコード取得バッファへのポインタ
戻り値
なし
void CRCCalc::input( unsigned char data )
CRCコードを算出する為のデータを入力します。
引数
data 入力データ
戻り値
なし
サンプルのソース
#include "crccalc.h"
void main( int argc, char* argv[] )
{
CRCCalc w_crc;
unsigned char* w_p;
char w_buf[128];
unsigned char w_crccode[2];
/**/
puts( "**** なにか入力してね ****" );
// 入力用バッファを初期化
memset( w_buf, 0x00, sizeof(w_buf) );
// 何か入力
fgets( w_buf, sizeof(w_buf), stdin );
// CRCコード算出
w_p = (unsigned char *)w_buf;
while( *w_p )
{
w_crc.input( (unsigned char)*w_p );
w_p ++;
}
// CRCコード取得
w_crc.get_crc( w_crccode );
printf( "CRCコード :%02X%02XH\n", w_crccode[0], w_crccode[1] );
// CRCチェック
w_crc.init( );
w_p = (unsigned char *)w_buf;
while( *w_p )
{
w_crc.input( (unsigned char)*w_p );
w_p ++;
}
w_crc.input( w_crccode[0] );
w_crc.input( w_crccode[1] );
printf( "CRCチェック結果:%04XH\n", w_crc.get_crc( ) );
// 擬似的にエラーパターンを生成
puts( "\n**** エラーパターンを作ってみたよ ****" );
w_buf[1] ++;
// 1バイト目を+1してエラーとする
puts( w_buf );
// 擬似エラーパターンに対してCRCチェック
w_crc.init( );
while( *w_p )
{
w_crc.input( (unsigned char)*w_p );
w_p ++;
}
w_crc.input( w_crccode[0] );
w_crc.input( w_crccode[1] );
printf( "CRCチェック結果:%XH\n", w_crc.get_crc( ) );
}
戻る