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( ) );
}



戻る