CRC3种方法介绍介绍

本文介绍了CRC校验的两种方法:计算法和查表法。计算法通过循环计算每个数据位与CRC寄存器的异或操作实现,而查表法则利用预计算的查表提高效率。提供了具体的C语言实现示例。
摘要由CSDN通过智能技术生成

以下3种算法都何以生成同样的16位crc结果。  
计算法最省单片机空间,查表法最快。
还有种简单查表,应该性能折衷。 
 /*****************  下面是5行示例crc16数据,前6个字节数据,后两个字节crc结果。  
F9 0C C2 36 13 2A 55 2A  
F9 0C C2 35 13 32 A5 20  
F9 0C C2 61 13 3A E5 36  
F9 0C C2 62 13 02 14 E4  
F9 0C C2 39 13 0A 64 F1  
******************/  
//==================计算法======================// 
 //modbus计算16位crc 

 uint16 calcrc16(uint8 *p,uint8 len)  
{  
uint8 i,j,temp;  
uint16 wcrc=0xffff;  
for (i = 0; i < len; i++)//循环计算每个数据 
 {  
   temp = *p & 0X00FF;//将八位数据与crc寄存器亦或  
 p++;//指针地址增加,指向下个数据  
wcrc ^= temp;//将数据存入crc寄存器 
 for (j = 0; j < 8; j++)//循环计算数据的
  {  if (wcrc & 0X0001)//判断右移出的是不是1,如果是1则与多项式进行异或。 
 {  wcrc >>= 1;//先将数据右移一位  
wcrc ^= 0XA001;//与上面的多项式进行异或 
 }  else//如果不是1,则直接移出  
{  wcrc >>= 1;//直接移出 
 } 
 } 
 } 
 //高低字节交换 
 return (wcrc<<8)+(wcrc>>8);  } 
 /

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值