我要用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的主要内容,如果未能解决你的问题,请参考以下文章

CRC的C语言的程序

计算机网络CRC检验中为啥选择16或32位效验码,效率最高?

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

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

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

crc16校验的c语言程序