资料介绍
计算机与信息技术论文
在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。在诸多
检错手段中,CRC是最闻名的一种。CRC的全称是循环冗余校验,其特征是:检错能力极强
,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的
几率仅为0.0047以下。从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方
式。因而,在数据存储和数据通讯领域,CRC无处不在:闻名的通讯协议X.25的FCS(帧检
错序列)采用的是CRC-
CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用
的图像存储格式GIF、TIFF等也都用CRC作为检错手段。
CRC的本质是模-
2除法的余数,采用的除数不同,CRC的类型也就不一样。通常,CRC的除数用生成多项式
来表示。最常用的CRC码的生成多项式如表1所示。
@@10A08800.GIF;表1.最常用的CRC码及生成多项式@@
由于CRC在通讯和数据处理软件中经常采用,笔者在实际工作中对其算法进行了探究和比
较,总结并编写了一个具有最高效率的CRC通用程序库。该程序采用查表法计算CRC,在
速度上优于一般的直接模拟硬件的算法,可以应用于通讯和数据压缩程序。
通常的CRC算法在计算一个数据段的CRC值时,其CRC值是由求解每个数值的CRC值的和对
CRC寄存器的值反复更新而得到的。这样,求解CRC的速度较慢。通过对CRC算法的探究,
我们发现:一个8位数据加到16位累加器中去,只有累加器的高8位或低8位和数据相功能
,其结果仅有256种可能的组合值。因而,我们可以用查表法来代替反复的运算,这也同
样适用于CRC32的计算。本文所提供的程序库中,函数crchware是一般的16位CRC的算法
;mk-
crctbl用以在内存中建立一个CRC数值表;crcupdate用以查表并更新CRC累