crc校验原理和计算方法(crc校验算法原理及实现)

CRC是对数据包或者保存文件的一种数据校验和数据纠错算法;是利用除法和余数原理,计算获取校验数据,并组成新的数据包。数据发送端通过CRC计算得到冗余数据,并打包形成新的数据包发送;数据接收端对接收数据包进行CRC校验,余数为0则证明传输数据无误。如下图为CRC数据处理示意图,即在原始

CRC 是对数据包或者保存文件的一种数据校验和数据纠错算法;是利用除法和余数原理,计算获取校验数据,并组成新的数据包。数据发送端通过CRC计算得到冗余数据,并打包形成新的数据包发送;数据接收端对接收数据包进行CRC校验,余数为0则证明传输数据无误。

如下图为CRC数据处理示意图,即在原始数据(K bit)后面再增加校验数据(R bit),构成新的数据包((K+R) bit);而校验数据是原始数据做除法运算后的余数。

crc校验原理和计算方法(crc校验算法原理及实现)

发送端数据CRC主要包括下述5个过程:

1. 确认CRC对应的多项式

既然是基于除法运算,就肯定有除数;而除数也是基于二进制的方式实现的,采用模2除法;

二进制除数与多项式之间存在对应关系,比如:

二进制除数为: 1101.

对应的多项式为: G(x)=X^3+X^2+1

多项式一般是由接收端和发送端协商确认,标准的CRC算法的多项式如下表所示:

crc校验原理和计算方法(crc校验算法原理及实现)

因此,确认了CRC标准后,也就得知了CRC对应的除数。

2. 确认CRC校验数据的位数

校验数据实际是除法运算后的余数,所以需要确认余数的位数;

而多项式与余数位数的对应关系为: 多项式的最高次幂为对应的余数位数;

比如多项式G(x)=X^3+X^2+1 最高为3次幂,所以余数位数为3,即校验数据的位数为3。

3. 移位,补充校验位

将原始数据左移R bit,低位补0

比如:

原始数据为:10011010,校验数据位数为3;则左移3位,形成新的数据:10011010_000

4. 计算CRC校验数据

用除数,对移位后数据做模2除法运算,得到的余数即为CRC校验数据;

比如:

原始数据: 10011010,

移位后数据:10011010_000

多项式为G(x)=X^3+X^2+1

模2除法运算,实际是异或运算,得到余数为:0101,实际要求余数位数为3bit,所以校验数据为101

crc校验原理和计算方法(crc校验算法原理及实现)

5. 组成新的数据包

新的数据包为: 原始数据+校验数据(余数),即为:10011010_101

接收端接收到数据包后,理论上该数据包已经加上了余数,所以正常情况下应该能够被除数整除而余数为0,所以接收端需要做的事情就是用协商的多项式(G(x)=X^3+X^2+1)对接收到的数据(10011010_101)进行异或运算,余数为0则说明数据传输无误。

CRC还可以实现对数据的纠错功能,以及CRC深入的原理,这个还没学会,学会了再分享。

创业项目群,学习操作 18个小项目,添加 微信:niuben22  备注:小项目

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.35chat.cn/53277.html