c语言累加和校验_用C语言实现CRC校验计算

摘 要:简述CRC算法原理,给出一种新颖快速的查表计算方法,并给出用C语言编写的算法源程序。

关键词:CRC、多项式、查表法

在编写数据传输程序时,数据容错是一个非常重要的问题。循环冗余位校验(Cyclicl Redundncy Check英文简称CRC)是目前运用非常广泛的一种数据容错方法,在数据传输,数据压缩等领域运用极其广泛。CRC的实现分为硬件和软件两种方法,其中软件实现的关键在于计算速度。如果单纯模拟硬件实现方法,则计算速度较慢。笔者在编制一个数据通讯软件中,运用了一种新颖的查表法计算CRC,速度很快,效果极佳。

首先介绍其原理,如果每次参与CRC计算的信息为一个字节,该信息字节加到16位的累加器中去时,只有累加器的高8位或低8位与信息字节相互作用(异或),相互作用(异或)的结果记为组合值,那么累加器中的新值等于组合值加上(按模2异或)累加器中未改变的那一半即为新的CRC值。

组合值只有256种可能,因此可利用硬件模拟算法先算好它们的CRC值预先填入一张表中,该表的每一单元对应相对值的CRC。这样就可以通过查表法来计算CRC值,以便大大提高CRC运算的速度。下面给出用C语言编制的计算程序。

首先将CRC生成多项式及CRC值表定义为一个头文件CRC.H:

#define CRC_CCITT 0x1021 //CCITT多项式

#define REV_CCITT 0x8408 //反转CCITT多项式

#define CRC16 0x8005//CRC16多项式

#define REV_CRC16 0x

001 //反转CRC16多项式

unsigned short crc_tble[256];

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值