我要用C语言编写CRC16效验码。通过输入一个串然后计算出CRC16效验码。例如:输入010600001388计算得到849C
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我要用C语言编写CRC16效验码。通过输入一个串然后计算出CRC16效验码。例如:输入010600001388计算得到849C相关的知识,希望对你有一定的参考价值。
最好是查表法的程序。多谢了!【备注】我是C语言的文盲。请各位大侠对程序关键的变量类型和函数做一定的注释。尤其对于函数的形参和返回值的类型一定要注释一下!我就是对C语言的数据类型特别迷茫!多谢了!
int cal_crc(unsigned char *ptr, unsigned char len)unsigned char i;
unsigned int crc_value =0;
while(len--)
for(i=0x80; i!=0; i>>=1 )
if (crc_value&0x8000)
crc_value = (crc_value << 1) ^0x8005 ;
else
crc_value = crc_value << 1 ;
if(*ptr&i)
另外,站长团上有产品团购,便宜有保证追问
敢问你能将CRC16程序完整附上吗?你放心,我还有几段C语言程序要编写呢。到时候可以考虑向你购买程序的,你发这个程序就当让我看看你们的产品质量了,怎么样?
参考技术A 网站上的算法大都是查512字节表的,对单片机来讲,太浪费空间了。根据老古网上资料,修改并测试通过以下算法:
unsigned int crc_ta[16]=
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
;
unsigned int Crc16(unsigned char *ptr, unsigned char len)
unsigned int crc;
unsigned char da;
crc=0;
while(len--!=0)
da=crc>>12;
crc<<=4;
crc^=crc_ta[da^(*ptr/16)];
da=crc>>12;
crc<<=4;
crc^=crc_ta[da^(*ptr&0x0f)];
ptr++;
return(crc);
以上是关于我要用C语言编写CRC16效验码。通过输入一个串然后计算出CRC16效验码。例如:输入010600001388计算得到849C的主要内容,如果未能解决你的问题,请参考以下文章