C语言中CRC循环校验的一个程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中CRC循环校验的一个程序相关的知识,希望对你有一定的参考价值。

#define crc_mul 0x1021 /*生成多项式*/ unsigned int cal_crc(unsigned char *ptr,unsigned char len) unsigned char i; unsigned int crc=0; while(len--!=0) 请问 1 while(len--!=0) 这句的len的值怎么改变? for(i=0x80; i!=0; i/=2) ... #define crc_mul 0x1021 /*生成多项式*/ unsigned int cal_crc(unsigned char *ptr,unsigned char len) unsigned char i; unsigned int crc=0; while(len--!=0) 请问 1 while(len--!=0) 这句的len的值怎么改变? for(i=0x80; i!=0; i/=2) 请问 2 for(i=0x80; i!=0; i/=2) 这句的怎么理解? if((crc&0x8000)!=0) crc*=2; crc^=crc_mul; /* 余式CRC乘以2再求CRC */ else crc*=2; if((*ptr&i)!=0) crc^=crc_mul; /* 再加上本位的CRC */ ptr++; return(crc); /*测试代码*/main() unsigned char i[8] = 0x00,0x00,0x00,0x00,0x06,0x0d,0xd2,0xe3;/*0x12,0x23,0xa5,0x86,0x07;*/ unsigned int crc; crc=cal_crc(&i,8); printf("%x",crc); getch(); 以上是CRC校验的一个程序,请问 1 while(len--!=0) 这句的len的值怎么改变?请问 2 for(i=0x80; i!=0; i/=2) 这句的怎么理解? 谢谢 如果可以 请帮我详细解释一下 整句的意思 展开

参考技术A while(len--!=0)
这句的len的值循环一次就减少1,先执行len!=0,再执行len--。
当len为0时退出循环。
for(i=0x80;
i!=0;
i/=2)
0x80是十六进制数,也即128
当i!=0时,执行循环体,
然后i=i/2,即i值减半。

以上是关于C语言中CRC循环校验的一个程序的主要内容,如果未能解决你的问题,请参考以下文章

CRC校验的实现(C语言,CRC16)

CRC校验的实现(C语言,CRC16)

CRC校验的实现(C语言,CRC16)

一文讲透CRC校验码-附赠C语言实例

一文讲透CRC校验码-附赠C语言实例

一个简短的CRC32计算程序 C语言