什么是CRC校验?
CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
CRC校验原理:
其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。
模2除法:
模2除法与算术除法类似,但每一位除的结果不影响其它位,即不向上一位借位,所以实际上就是异或。在循环冗余校验码(CRC)的计算中有应用到模2除法。
例:
CRC校验步骤:
CRC校验中有两个关键点,一是预先确定一个发送送端和接收端都用来作为除数的二进制比特串(或多项式),可以随机选择,也可以使用国际标准,但是最高位和最低位必须为1;二是把原始帧与上面计算出的除数进行模2除法运算,计算出CRC码。
具体步骤:
1. 选择合适的除数
2. 看选定除数的二进制位数,然后再要发送的数据帧上面加上这个位数-1位的0,然后用新生成的帧以模2除法的方式除上面的除数,得到的余数就是该帧的CRC校验码。注意,余数的位数一定只比除数位数少一位,也就是CRC校验码位数比除数位数少一位,如果前面位是0也不能省略。
3. 将计算出来的CRC校验码附加在原数据帧后面,构建成一个新的数据帧进行发送;最后接收端在以模2除法方式除以前面选择的除数,如果没有余数,则说明数据帧在传输的过程中没有出错。
CRC校验码计算示例:
现假设选择的CRC生成多项式为G(X) = X4 + X3 + 1,要求出二进制序列10110011的CRC校验码。下面是具体的计算过程:
①将多项式转化为二进制序列,由G(X) = X4 + X3 + 1可知二进制一种有五位,第4位、第三位和第零位分别为1,则序列为11001
②多项式的位数位5,则在数据帧的后面加上5-1位0,数据帧变为101100110000,然后使用模2除法除以除数11001,得到余数。
③将计算出来的CRC校验码添加在原始帧的后面,真正的数据帧为101100110100,再把这个数据帧发送到接收端。
④接收端收到数据帧后,用上面选定的除数,用模2除法除去,验证余数是否为0,如果为0,则说明数据帧没有出错。

https://blog.csdn.net/d_leo/article/details/73572373

CRC冗余校验举例和原理相关推荐

  1. 校验码(海明校验,CRC冗余校验,奇偶校验)

    循环冗余校验码 CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书 ...

  2. java 奇偶校验_校验码(海明校验,CRC冗余校验,奇偶校验)

    循环冗余校验码 CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书 ...

  3. CRC冗余校验码及查表法

    CRC冗余校验码及查表法 什么是CRC编码 它将一个长度为k的位串看作是系数是0或者1的k-1次多项式 使用一个长度为r+1的生成多项式进行模2计算,生成一个长度为r的字符序列,能检测长度小于等于r的 ...

  4. CRC冗余校验码源码代码c语言,循环冗余校验码(CRC)应用总结(包括C++源码)

    最近在实习期间需要用到数据的校验,所选为CRC16,那么就在此总结一番吧. 现在此说明下什么是CRC:循环冗余码校验 英文名称为Cyclical Redundancy Check,简称CRC,它是利用 ...

  5. 计算机网络之数据链路层:3、差错控制(奇偶校验、CRC冗余校验、海明校验)

    差错控制 思维导图: 什么是差错: 位错: 位错之检错编码:奇偶校验码 位错之检错编码:循环冗余码 位错之纠错编码:海明校验码 思维导图: 什么是差错: 产生差错的原因主要是噪声:噪声分为全局性噪声和 ...

  6. CRC冗余校验码的介绍和实现

    from:http://yoyo.play175.com/p/200.html 节选至百度百科: 首先,任何一个由二进制数位串组成的代码,都可以惟一地与一个只含有0和1两个系数的多项式建立一一对应的关 ...

  7. C++实现CRC冗余校验中FCS检测序列的生成

    循环冗余检测(Cyelie Redundancy Check) CRC编码也称为多项式编码. CRC编码操作如下.考虑d比特的数据D,发送节点要将它发送给接收节点.发送方和接收方必须首先协商一个r+1 ...

  8. CRC 冗余校验计算

    (1)设G(x)为r阶,则在信息位末尾加r个0形成新信息 r=原信息位数 - 1 转载于:https://www.cnblogs.com/RzCong/p/6246574.html

  9. 从原理到代码理解CRC循环冗余校验

    概述:本文详细介绍了CRC循环冗余计算的数学原理,算法中使用的参数说明,并以Modbus协议中的CRC-16算法为例,进行手算验证,同时提供LabVIEW和C语言的直接计算CRC-16 值的代码以及C ...

最新文章

  1. 线程的生命周期和状态控制
  2. java的foeachr循环_for循环和Dowhile循环的应用
  3. WINDOWS2008网络负载平衡群集(NLB)完全攻略
  4. Unity插件学习记录 -- SW Actions
  5. 跨页面调用方法_Excel多表汇总不用愁,五种多表合并方法,高效完成日常工作...
  6. 深入理解 Spring 事务原理
  7. 用户登录功能设计思路
  8. Lucene倒排索引简述 番外篇
  9. concat函数_《MySQL 入门教程》第15篇MySQL常用函数之字符函数
  10. Android Jetpack组件之Room数据库使用
  11. 正则表达式必看书籍推荐
  12. APS系统哪家好(下)
  13. 模具分类以及塑胶模具设计流程
  14. vue3项目打包优化三步走
  15. ArcGIS切片生成工具-ArcGIS缓存管理
  16. hadoop个人总结
  17. laravel教程 第一章安装laravel
  18. 场效应晶体管与晶体三极管对比,谁能更胜一筹?
  19. 用 ECharts 做出漂亮的数据统计图
  20. HDFS的文件压缩格式

热门文章

  1. vue todolist
  2. Keepalived详解之 - LVS(IPVS)管理工具ipvsadm使用指南
  3. redis 版的 hello world
  4. Linux中vim编辑器的缩进的功能键
  5. easyui plugin——etreegrid:CRUD Treegrid
  6. 数据结构与算法2——数组
  7. ASP.NET MEMBERSHIP的XML配置
  8. mysql 子字符串函数_MySQL 内置字符串函数
  9. 为什么用链路聚合_H3C ComwareV7平台网络设备可靠性配置——链路聚合
  10. linux下log日志乱码_如何用 Linux 技巧大大提高工作效率?