📄 16位crc校验说明.txt
字号:
1、求16位CRC的c语言实现代码
short oddparity[16] = { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 };
unsigned short docrc16(unsigned short svalue,unsigned short indata);
//以计算的方式求生成多项式为 x(16)+x(15)+x(2)+1 的CRC16校验
unsigned short docrc16(unsigned short svalue,unsigned short indata)
{
unsigned short CRC16;
CRC16 =svalue;
indata = (indata ^ (svalue & 0xff)) & 0xff;
CRC16 >>= 8;
if (oddparity[indata & 0xf] ^ oddparity[indata >> 4])
CRC16 ^= 0xc001;
indata <<= 6;
CRC16 ^= indata;
indata <<= 1;
CRC16 ^= indata;
return CRC16;
}
void GetCRC16(unsigned short startvalue,BYTE *inputvalue,int len,BYTE rtn_HiLo[2])
{
int i;
unsigned short crc16,temp;
crc16 =startvalue;
for(i=0;i<len;i++)
{
temp =*(inputvalue+i);
crc16 =docrc16(crc16,temp);
}
rtn_HiLo[0] =(BYTE)(crc16/256);
rtn_HiLo[1] =(BYTE)(crc16%256);
}
说明:函数GetCRC16计算16位crc的调用函数,startvalue是16位移存器的初始值,我们一般将其赋0,inputvalue是要进行校验的数据内容,len是数据的字节数,rtn_HiLo[2]是返回值,16位crc的高字节放在rtn_HiLo[0]中,低字节放在rtn_HiLo[1]中。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -