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校验值。