crc_table.cpp

来自「C 程序 球面方位角算法: azimuth.cpp CRC校验快速算法: C」· C++ 代码 · 共 31 行

CPP
31
字号
//生成多项式为r次的(N,k)循环码单项式监督码码表生成函数
//给出码表地址CRC_Tb、(N,r)值, CRC_Tb[r]必须赋值为生成式gx
//生成式的末r位二进制值gx表示: 如g(x)=x16+x12+x5+1 表示为:gx=0x1021;
 void CrcTable(int N, int r, unsigned short CRC_Tb[])
{
	int i=0;
	for(;i<r;i++)		CRC_Tb[i]=1<<i;
    for(i=r+1;i<N;i++)	
	{	CRC_Tb[i]=CRC_Tb[i-1]<<1;
		if(CRC_Tb[i-1]&(1<<r-1)) 
		{	CRC_Tb[i]^= CRC_Tb[r]; }
	}
}


//校验和——对给定序列dat计算CRC校验和:  按整字节(N)设计,不足整字节则高位补0: 从高至低为 0~N-1字节
unsigned short Crc(unsigned char *dat, int N)
{	int i, j;
	unsigned short b=0, CRC=0;
	unsigned char a,c;	
	for(i=0;i<N;i++) 
	{	 
		for(j=0;j<8;j++) 
		{	
			b=CRC_Tb[(N-i)*8-j-1];
			if((0x80>>j)&dat[i]	)						//对应位(i*8+j)比特是1时 a位与c大于0
			{  CRC^=(b<<8)^(b>>8); }
		}
	}
	return CRC;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?