C语言的错误校验编码段,CRC校验的快速算法的C语言实现_颜国谷

CRC校验的快速算法的C语言实现

颜国谷 (中原油田信息中心 457001)

摘要:C R C循环冗余校验算法,是一种在数据存储和数据通讯领域中使用十分广泛的编码算法,具有强力的检错和纠错能力,并且开销比较小。本文从CRC基本原理出发,介绍了CRC快速算法的原理,以C语言为实现手段,实现了该算法。关键字:CRC校验快速CRC并行CRC C语言 CRC生成多项式进行模2除,即: (2-2)根据式2-1,可以得到: (2-3)根据,根据相同的序列按位异或的结果为0,因此,式 2-3的就可以化为: (2-4)从中就可以看出,接收端计算的结果是整除的,没有余数,这也就是CRC在接收端判断数据是否正确的标准。因此整个C R C计算过程就是将要发送的信息左移k位,然后将与生成多项式进行模2除法,等到的k位长的余数就是C R C校验信息。 CRC的标准是多种多样的,一般是依据生成多项式的长度分为CRC-8,CRC16等,以下就是几种典型的生成多项式:

1.引言

在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错或者纠错的编码手段。在诸编码方式中,C R C是其中著名的一种,其特点是,检错能力极强,开销小,易于用编码器及检测电路实现;从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,C R C都被广泛运用,例如,通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,ARJ、LHA等压缩工具软件采用的是C R C32,磁盘驱动器的读写采用了 CRC16,通用的图像存储格式GIF、TIFF等也都使用CRC作为检错手段。

2.CRC原理

C R C校验是一种线性编码理论,对于要传输n位二进制码序列,在发送端,根据已定的生成多项式,按照一定的规则,产生一段k位的校验码(即C R C码),附在要发送的信息后,构成一个新的长为(n+k)位的二进制码序列,再发送给接收端。在接收端,则根据接收的数据部分和C R C之间是否预定的关系,从而判定在传输过程中是否出现传输错误。 C R C的计算是一种模2的除法,与普通的除法主要的差别是在计算过程中减法,使用的不借位/进位的模2加运算,等同于按位异或。二进制序列数据流,可以用模2多项式表示,多项式的系数就是序列的值。如101011可以表示为:。假设要传输的n位长度的二进制序列,表示为:,使用的CRC生成多项式,记为:

3.CRC-16快速算法原理

在工程运用中,基于上面介绍的按照模2除法,计算C R C校验算法的工作量是很大的,特别是对于越长的序列,因为没1为数据就要进行一个计算。例如一个以

太网数据包的包长最大为1518b y t e,计算这样的一个数据包需要的时间和计算量的花费很多,找到一种快速的C R C计算方法(也成并行C R C算法),对于工程应用是十分有必要的。可以采用增加每次CRC的输入的数据长度来简化运算需要的时间和运算量,一般使用1byte输入数据代替1bit的输入。以CRC-8为例,如果要计算一个16bit的数据的CRC-8。 16bit数据,记为:其中就是第1b y t e的数据,是第2byte的数据。那么按照前面介绍的CRC原理,计算过程:

如果将二进制序列和生成多项式,进行下面的计算: (2-1)就是C R C校验码,它的长度应该是比生成多项

得到的

式少一位,要发送的数据就是:。在接收端,对数据进行校验就是将接收到数据和已定的

(3-1)假定,

128科学中国人 2010年第7期

1-1181-jpg_6_0_______-914-0-0-914.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值