📄 crc_table.cpp
字号:
//生成多项式为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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -