[PR]

水無瀬の部屋 > Programming > sample > tools > misc > crc16.cpp
最終更新日: 2007/03/24

   1: //*********************************************************
   2: // プロジェクト: TOOLS::CRC
   3: //   ファイル名: crc16.cpp
   4: //*********************************************************
   5: #include <misc/crc16.h>
   6: #include <misc/binary.h>
   7: #include <header/tooldbg.h>
   8: #include <header/toolbase.h>
   9: #include <limits.h>
  10: 
  11: 
  12: //---------------------------------------------------------
  13: // 定数型マクロ の 定義
  14: //---------------------------------------------------------
  15: #define DBG_ALLOCNAME  "CRC16_CreateAlgorithm"
  16: 
  17: 
  18: //---------------------------------------------------------
  19: // 構造体 の 宣言
  20: //---------------------------------------------------------
  21: typedef struct CRC16_CTX_tag
  22: {
  23: 	WORD crc;
  24: 	WORD tbl[ UCHAR_MAX+1 ];
  25: } CRC16_CTX;
  26: 
  27: 
  28: //---------------------------------------------------------
  29: // ファイルスコープ変数 の 定義
  30: //---------------------------------------------------------
  31: static WORD calc_crc16( WORD crc, BYTE byte );
  32: 
  33: 
  34: //*********************************************************
  35: // CRC16_CreateAlgorithm
  36: //*********************************************************
  37: CRC16_CTX *
  38: CRC16_CreateAlgorithm
  39: 	(
  40: 		WORD poly 
  41: 	)
  42: {
  43: 	CRC16_CTX *context = (CRC16_CTX *)malloc( sizeof( *context ) );
  44: 	if ( !context )
  45: 		return null;
  46: 
  47: 	CRC16_InitData( context, poly );
  48: 
  49: 	DBG_LOCK_ALLOCED_MEMORY( context, DBG_ALLOCNAME ); // [DBG]
  50: 	return context;
  51: }//CRC16_CreateAlgorithm
  52: 
  53: //*********************************************************
  54: // CRC16_DestroyAlgorithm
  55: //*********************************************************
  56: bool
  57: CRC16_DestroyAlgorithm
  58: 	(
  59: 		CRC16_CTX *context
  60: 	)
  61: {
  62: 	// パラメタの仮定
  63: 	ASSERT( IsValidPtr( context, sizeof( *context ) ) );
  64: 
  65: 	DBG_UNLOCK_ALLOCED_MEMORY( context, DBG_ALLOCNAME ); // [DBG]
  66: 	free( context );
  67: 
  68: 	return true;
  69: }//CRC16_DestroyAlgorithm
  70: 
  71: //*********************************************************
  72: // CRC16_InitData
  73: //*********************************************************
  74: bool
  75: CRC16_InitData
  76: 	(
  77: 		CRC16_CTX *context,
  78: 		WORD       poly 
  79: 	)
  80: {
  81: 	// パラメタの仮定
  82: 	ASSERT( IsValidPtr( context, sizeof( *context ) ) );
  83: 
  84: 	//
  85: 	context->crc = 0xFFFF;
  86: 
  87: 	//
  88: 	{for( int i = 0; i <= UCHAR_MAX; ++i )
  89: 	{
  90: 		WORD tmp16 = static_cast<WORD>( i );
  91: 		{for( int j = 0; j < CHAR_BIT; ++j )
  92: 		{
  93: 			tmp16 = static_cast<WORD>( (0 != (tmp16 & 0x01)) ? ((tmp16 >> 1) ^ poly) : (tmp16 >> 1) );
  94: 		}}
  95: 		context->tbl[ i ] = tmp16;
  96: 	}}
  97: 
  98: 	return true;
  99: }//CRC16_InitData
 100: 
 101: //*********************************************************
 102: // CRC16_AddData
 103: //*********************************************************
 104: WORD
 105: CRC16_AddData
 106: 	(
 107: 		      CRC16_CTX *context,
 108: 		const void      *data,
 109: 		      int        length
 110: 	)
 111: {
 112: 	//
 113: 	const BYTE *p = static_cast<const BYTE *>( data );
 114: 
 115: 	//
 116: 	{for( int i = 0; i < length; ++i )
 117: 	{
 118: 		context->crc = static_cast<WORD>( (context->crc >> CHAR_BIT) ^ context->tbl[ p[ i ] ^ static_cast<BYTE>( context->crc ) ] );
 119: 	}}
 120: 
 121: 	return context->crc;
 122: }//CRC16_AddData
 123: 
 124: 
 125: //** end **
 126: 

参照:


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬の部屋 > sample > tools > misc > crc16.cpp

このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/tools/misc/crc16_cpp.shtml
『新妻LOVELY×CATION』を応援しています!