摘要:CRC循环冗余校验算法,是一种在数据存储和数据通讯领域中使用十分广泛的编码算法,具有强力的检错和纠错能力,并且开销比较小。本文从CRC基本原理出发,介绍了CRC快速算法的原理,以C语言为实现手段,实现了该算法。
1. 引言在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错或者纠错的编码手段。在诸编码方式中,CRC是其中著名的一种,其特点是,检错能力极强,开销小,易于用编码器及检测电路实现;从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。因而,在数据存储和数据通讯领域,CRC都被广泛运用,例如,通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都使用CRC作为检错手段。
2. CRC原理
CRC校验是一种线性编码理论,对于要传输n位二进制码序列,在发送端,根据已定的生成多项式,按照一定的规则,产生一段k位的校验码(即CRC码),附在要发送的信息后,构成一个新的长为(n+k)位的二进制码序列,再发送给接收端。在接收端,则根据接收的数据部分和CRC之间是否预定的关系,从而判定在传输过程中是否出现传输错误。
CRC的计算是一种模2的除法,与普通的除法主要的差别是在计算过程中减法,使用的不借位/进位的模2加运算,等同于按位异或。
二进制序列数据流,可以用模2多项