CRC校验的基本原理(循环移位的模2运算)我就不介绍了,网上的资料很多,这里仅发点我做过的通讯程序中的CRC实现代码,以供大家参考。生成多项式为:x16+x14+1。
//计算CRC校验
WORD CalcCrc(BYTE crcbuf, WORD crc)
{
int i;
crc=crc ^ crcbuf;
for(i=0;i<8;i++)
{
BYTE chk;
chk=crc&1;
crc=crc>>1;
crc=crc&0x7fff;
if(chk==1)
crc=crc^0xa001;//x16+x14+1
crc=crc&0xffff;
}+
return crc;
}
//计算CRC校验
WORD CRCCheck16(WORD crc, BYTE *buf, int len)
{
BYTE hi,lo;
int i;
for(i=0;i<len;i++)
{
crc=CalcCrc(*buf,crc);
buf++;
}
hi=crc%256;
lo=crc/256;
crc=(lo<<8)|hi;
return crc;
}
调用CRCCheck16()函数即可得到CRC校验值。
本文介绍了一种CRC16校验算法的具体实现方法,包括循环移位的模2运算,并提供了完整的C语言代码示例。该算法采用生成多项式x16+x14+1,适用于通讯程序中的数据校验。
1165

被折叠的 条评论
为什么被折叠?



