加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C语言CRC校验

(2022-08-07 12:03:21)
标签:

it

科学

知识/探索

教育

分类: 科技

#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 \n",crc1); //查看一次校验码
printf("二次校验码(高低):crc2 = hx \n",crc2); //查看二次校验码是否是零,是零有效

printf("带校验码的新数组(低高):");
for(i=0;i<5;i++)
{
printf("x ",buf1[i]);
}
printf("\n");
printf("数组尾部十六进制校验码(低高):");
for(i=3;i<5;i++)
{
printf("x ",buf1[i]);
}
printf("\n");
    return 0;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有