登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

易拉罐的博客

心静自然凉

 
 
 

日志

 
 

转 CRC算法分析&源码  

2010-07-03 11:06:32|  分类: 串行通信 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
CRC校验用于通讯过程中,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的n位CRC码,并附在信息后边,构成一个新的二进制码序列(共k+n位)发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行校验,以确定传送过程中是否出错。

      n位CRC码产生的规则是先将要发送的二进制序列M(x)左移n位,然后再除以一个n+1位的多项式G(x),最后得到的n位的余数R(x)即是CRC校验码。

      不同位数的CRC采用的G(x)取值如下:
      1)CRC4 = X4 + X + 1
      2)CRC8 = X8 + X5 + X4 + 1
      3)CRC12 = X12 + X11 + X3 + X2 + 1
      4)CRC16 = X16 + X15 + X2 + 1 (美国)
      5)CRC-CCITT = X16 + X12 + X5 + 1 (欧洲)
      6)CRC32 = X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X5 + X4 + X2 + X1 + 1

      在接收端,将收到的数据除以G(x),若余数为0则表明校验正确,然后将收到的数据右移n位得到的值就是原始数据。

      在计算CRC码的除法运算中,采用的是模2除(按位除)而不是算术除。因此,加法和减法的运算结果是一样的。

      常用CRC16计算方法:
      1)按位计算CRC
      本位后的CRC码等于上一位CRC码乘以2后除以多项式(G(x)去除最高位),所得的余数再加上本位值除以多项式所得的余数。

      2)按字节计算CRC
      本字节后的CRC码等于上一字节余式CRC码的低8位左移8位后,再加上上一字节CRC右移8位(即取高8位)和本字节之和所求得的CRC码。

      3)按半字计算CRC
      本字节后的CRC 码等于上一字节CRC码的低12 位左移4位后,再加上上一字节余式CRC右移4位(即取高4位)和本字节之和后所求得的CRC码。

      采用三种方法实现的CRC16(CCITT)源码:

      rar

http://blog.ednchina.com/sk321/168853/message.aspx

  评论这张
 
阅读(545)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018