用C语言实现CRC校验计算

更新时间:2023-07-20 16:08:35 阅读: 评论:0

C语言实现简单家常菜CRC校验计算
  要:简述CRC算法原理,给出一种新颖快速的查表计算方法,并给出用C语言编写的算法源程序。
关键词CRC、多项式、查表法
在编写数据传输程序时,数据容错是一个非常重要的问题。循环冗余位校验(Cyclic Redundancy 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]; //CRC值表
注:16CCITT多项式(X16 +X12 +X5 +1)和16CRC16多项式(X16 +X15 +X2+1
为两种最常用的CRC多项式。反转多项式是指在数据通讯时,信息字节先传送或接收低位字节,如重新排位影响眼角有纹CRC计算速度,故设反转多项式。
  造表和查表法CRC计算函数。
#include crc.h
void mk_crctble(unsigned short genpoly)
  unsigned short crc_tble[256];
unsigned short
ccnum=0;
unsigned short i,j,k;
名字对联  for(i=0,k=0;i<256;i++,k++)   
   i<<=8;
三思而后行      for(j=8;j>0;j )     
       党的誓词if((i^ccnum)&0x8000)
ccnum=(
ccnum<<=1)^genpoly;
       el 
ccnum<<=1;
   i<<=1;        
      crc_tble[k]=
ccnum;   
  void crc_upd
te(unsigned short d
t
,unsigned short
ccnum)
ccnum=(
ccnum<<=8)^crc_tble[(
ccnum>>8)^d
t]; 
注:genpolyCRC多项式,贫血吃什么药效果好
ccnum为累加器值(即为新的CRC高铁的简笔画值),d
t
为参与CRC计算的信息。
 
 
参考文献:
1】顾慰文,《纠错码及其在计算机系统中的应用》,人民邮电出版社,1980
2J.P.Roth,W.G.Bouricius: Progrmmed lgorithms to compute tests todetect nd nd distinguish between filures in logic circuits, IEEETrns. Electron. Comput.,EC-16,No.5,pp.567-580(1977)
3Joe Cmpell:C Progr mmer s Guide to Seril Communiction.(1988)
 

本文发布于:2023-07-20 16:08:35,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1107141.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字节   计算   实现   软件   给出   硬件   算法   语言
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图