新浪博客

C语言CRC校验

2022-08-07 12:03阅读:
#include
#include
//CRC校验程序
unsigned short CrcCheck(char*bufOut,char *buf,char length)
{
unsigned short tmp,CRC;
char i,j,CRCHi, CRCLo;
memcpy(bufOut,buf,length); //前端存储原字符
bufOut[length+2]='\0'; //后端存储结束符
CRC=0xFFFF;
for(i=0; i
{
CRC=buf[i]^CRC;
for(j=0;j<8;j++)
{
tmp=CRC&0x0001;
CRC=CRC>>1;
if(tmp)
CRC=CRC^0xA001;
}
}
CRCLo=CRC&0xFF;
CRCHi=CRC>>8;
bufOut[length]=CRCLo; //CRC校验码存在原字符后面(低前高后)
bufOut[length+1]=CRCHi; //CRC校验码存在原字符后面(低前高后)
return CRC; //返回CRC校验码(高前低后)
}
int main()
{
char i;
char buf[4]={0x11,0x22,0x33,'\0'}; //需要校验的原数组
char buf1[6],buf2[8]; //定义一次校验和二次校验字节数组
unsigned short crc1,crc2; //定义一次、二次校验码存储变量
char CRC1Hi, CRC1Lo; //定义校验码的高低位字节存储变量
crc1=CrcCheck(buf1,buf,3); //一次校验
crc2=CrcCheck(buf2,buf1,5); //二次校验
printf('一次校验码(高低):crc1 = hx ',crc1); //查看一次校验码
printf('二次校验码(高低):crc2 = hx ',crc2); //查看二次校验码是否是零,是零有效
r>printf('带校验码的新数组(低高):');
for(i=0;i<5;i++)
{
printf('x ',buf1[i]);
}
printf('');
printf('数组尾部十六进制校验码(低高):');
for(i=3;i<5;i++)
{
printf('x ',buf1[i]);
}
printf('');
return 0;
}

我的更多文章

下载客户端阅读体验更佳

APP专享