📄 crc.cpp
字号:
#include "port.h"
/*
CRC-4 x4+x1+1 ITU G.704
CRC-12 x12+x11+x3+x+1
CRC-16 x16+x15+x2+1 0x8005 IBM SDLC
CRC-ITU x16+x12+x5+1 0x1201 ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS
CRC-32 x32+x26+x23+...+x2+x+1 0x04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS
CRC-32c x32+x28+x27+...+x8+x6+1 0x1EDC6F41 SCTP
*/
const int CRC8_SEED = 0x31;
const int CRC16_SEED = 0x8005;
const int CRC32_SEED = 0x04C11DB7;
static unsigned long crc32_table[256];
static unsigned char crc8_table[256];
unsigned long CalcCRC32(const LPBYTE inData, size_t inLen)
{
unsigned long dwRegister = 0xFFFFFFFF;
for(unsigned long i=0; i<inLen; i++ )
{
dwRegister = ((dwRegister) << 8) ^ crc32_table[(inData[i]) ^ (dwRegister>>24)];
}
return dwRegister;
}
/*
static unsigned short crc16_table[256]; // CRC table
unsigned short CalcCRC16(const LPBYTE aData, size_t aSize )
{
unsigned short nAccum = 0;
for (size_t i = 0; i < aSize; i++ )
nAccum = ( nAccum << 8 ) ^ crc16_table[( nAccum >> 8 ) ^ aData[i]];
return nAccum;
}
*/
unsigned char CalcCRC8(const LPBYTE pbuf, size_t len)
{
unsigned char crc = 0;
for(unsigned i=0; i < len; i++)
{
crc = crc8_table[crc ^ pbuf[i]];
}
return crc;
}
void BuildCrcTable( )
{
int i=0;
for (i = 0; i < 256; i++ )
{
unsigned char nData = i;
unsigned char nAccum = 0;
for (size_t j = 0; j < 8; j++ )
{
if ( ( nData ^ nAccum ) & 0x80 )
nAccum = ( nAccum << 1 ) ^ CRC8_SEED;
else
nAccum <<= 1;
nData <<= 1;
}
crc8_table[i] = nAccum;
}
/*
for (size_t i = 0; i < 256; i++ )
{
unsigned short nData = ( unsigned short )( i << 8 );
unsigned short nAccum = 0;
for (size_t j = 0; j < 8; j++ )
{
if ( ( nData ^ nAccum ) & 0x8000 )
nAccum = ( nAccum << 1 ) ^ CRC16_SEED;
else
nAccum <<= 1;
nData <<= 1;
}
crc16_table[i] = nAccum;
}
*/
for (i = 0; i < 256; i++ )
{
unsigned long nData = ( unsigned long )( i << 24 );
unsigned long nAccum = 0;
for (size_t j = 0; j < 8; j++ )
{
if ( ( nData ^ nAccum ) & 0x80000000 )
nAccum = ( nAccum << 1 ) ^ CRC32_SEED;
else
nAccum <<= 1;
nData <<= 1;
}
crc32_table[i] = nAccum;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -