水無瀬の部屋 > Programming > sample > tools > misc > crc16.cpp |
---|
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:
参照:
水無瀬の部屋 > 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