关于CRC冗余校验原理及实现

关于CRCITCC16校验码计算的疑惑。
/******函数名:CRCCCITT_CalculateBuf() *********************
 *
 *   功能描述:
 *       这个函数为CRC-CCITT的CRC16的计算函数,计算指定地址和个数
 *       的数据的CRC_16的校验值.
 *       EPC标签中的CRC计算采用CRC-CCITT算法。
 *       计算公式:
 *         CRC_16= x^16 + x^12 + x^5 + 1
 *
 *   调用参数:    
 *       ptr 计算的数据起始地址
       len 计算的数据长度
 *   返回值:      
 *       函数计算的CRC值
 *   函数代码:   
 */
UINT16 CRCCCITT_CalculateBuf(UINT8 *ptr, UINT16 len)
{
  UINT8    i;
  UINT16 crc_result = 0xffff;    //此处为何要这样设置啊?
  while(len--)
  {
    for(i=0x80; i!=0; i>>=1 )
  { 
       if (crc_result&0x8000)
              crc_result   = (crc_result << 1) ^0x1021 ;
       else
             crc_result <<= 1 ;
         
       if(*ptr&i)
              crc_result^=0x1021 ;    //什么时候要执行两次出发运算
  }
  ptr++;
 }
 return crc_result;
  } 

还有一点是当i= 0x80时的除法运算,按原理来说应该是*ptr<<8^0x1021 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值