精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>编码解码>>共享点代码给大家——关于CRC(2/2)

主题:共享点代码给大家——关于CRC(2/2)
发信人: riffle(罗慢)
整理人: wenbobo(2002-12-21 22:44:44), 站内信件
// ********************* START OF CRC.CPP *********************
//
// This file contains the supporting code for the two CRC classes,
// Crc16 and Crc32.
//

#include "crc.h"

unsigned long Crc32::table[ 256 ];
int Crc32::initialized = 0;

Crc32::Crc32( unsigned long init_value )
{
  if ( !initialized )
  {
    int i;
    int j;
    unsigned long coeff;

    for ( i = 0; i < 256 ; i++ )
{
coeff = i;
for ( j = 0; j < 8; j++ )
{
if ( coeff & 1 )
coeff = ( coeff >> 1 ) ^ 0xEDB88320L;
        else
          coeff >>= 1;
      }
      table[ i ] = coeff;
    }
    initialized = 1;
  }
  crc = init_value;
}

unsigned short Crc16::table[ 256 ];
int Crc16::initialized = 0;

Crc16::Crc16( unsigned short init_value )
{
  if ( !initialized )
  {
    int i;
    int j;
    int k;
    int crc;

    for ( i = 0 ; i < 256 ; i++ )
{
k = i << 8;
crc = 0;
for ( j = 0 ; j < 8 ; j++ )
{
if ( ( crc ^ k ) & 0x8000 )
crc = ( crc << 1 ) ^ 0x1021;
else
crc <<= 1;
k <<= 1;
}
table[ i ] = (unsigned short) crc;
}
initialized = 1;
}
crc = init_value;
}

// *********************** END OF CRC.CPP ***********************

[关闭][返回]