CRC校验原理与计算
来源:互联网 发布:赵丽颖林更新网络剧 编辑:程序博客网 时间:2024/06/05 19:51
CRC,(Cyclic Redundancy Check),循环冗余校验。
1,CRC的原理
CRC校验的原理在很多地方写的都比较详细,也比较复杂,但其本质就是一种校验码的计算方法。收、发双方在通信之前要约定好一个多项式(介绍原理的地方也叫做生成多项式,其实就是一串二进制码,关于多项式跟二进制码的对应关系可以参考附录1),通过信息码跟生成多项式做“模2除法”就能计算出校验码,当然,校验码的位数也是由生成多项式决定的(校验码位数=生成多项式对应二进制串位数-1)。
常用的生成多项式有:IBM的SDLC(同步数据链路控制)规程中使用的CRC-16,生成多项式g(x)= x16 + x15 + x2 +1(对应二进制比特串为:11000000000000101);而在ISO HDLC(高级数据链路控制)规程、ITU的SDLC、X.25、V.34、V.41、V.42等中使用CCITT-16生成多项式g(x)= x16 + x15 + x5 +1(对应二进制比特串为:11000000000100001)。
“模2除法”跟“算术除法”不同,它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只是以相同位数做逻辑异或运算。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。
“模2除法”和“模2乘法”示例
2,CRC的计算步骤
假设信息码是10110011,生成多项式约定为G(X) = X4 + X3 + 1,则对应的二进制串为11001,所以需要计算的校验码位数为4位。
1)信息码左移4位,末尾补0,得到101100110000,这个数以“模2除法”的方式除以生成多项式11001,得到的余数为0100,此即为CRC校验码。
CRC校验码计算示例
2)将计算得到的CRC校验码0100,替换在信息码末尾补的4个0,得到101100110100,即为要发送的最终数据。
3)在接收端,因为把模2除法的余数加在了信息码的末尾,因此,在没有通信错误的情况下,收到的数是可以以“模2除法”的方式整除约定好的生成多项式的。这也就是CRC校验的原理。
附录
1,多项式跟二进制数的对应关系:多项式的最高幂次对应二进制数的最高位,以后各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0
参考文献:
https://baike.baidu.com/item/CRC%E6%A0%A1%E9%AA%8C/3439037?fr=aladdin
http://winda.blog.51cto.com/55153/1063951
- CRC校验原理与计算
- CRC原理与计算
- CRC校验计算
- CRC码计算及校验原理的最通俗诠释
- CRC码计算及校验原理的最通俗诠释
- CRC码计算及校验原理的最通俗诠释
- CRC码计算及校验原理的最通俗诠释
- 【计算机网络】循环冗余校验CRC算法原理&计算过程
- CRC校验原理
- CRC校验原理
- CRC校验原理
- CRC校验原理
- CRC校验原理
- CRC校验算法原理
- CRC校验原理
- CRC校验原理
- CRC校验原理
- CRC校验原理
- raise NoReverseMatch("%s is not a registered namespace" % key)
- 【数据分析】脑图讲述数据分析方法论
- 相机标定
- Butter Knife使用详解
- HTML5表单
- CRC校验原理与计算
- 企业内容管理-互联网应用
- openstack安装与配置
- 谈谈 HTTPS
- 实现盒子的垂直水平居中
- 在datagridview控件中添加“合计”和“平均值” 摘抄自书
- 起点
- 第一次测试(3,4两题+反思)
- 04-树4 是否同一棵二叉搜索树