[PR]

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

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

参照:


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

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

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

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