⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc.cpp

📁 自己在wince的环境下做的一移动数字电视驱动
💻 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 + -