天天被操天天被操综合网,亚洲黄色一区二区三区性色,国产成人精品日本亚洲11,欧美zozo另类特级,www.黄片视频在线播放,啪啪网站永久免费看,特别一级a免费大片视频网站

現(xiàn)在位置:范文先生網(wǎng)>理工論文>計(jì)算機(jī)信息技術(shù)>用C語(yǔ)言實(shí)現(xiàn)CRC校驗(yàn)計(jì)算

用C語(yǔ)言實(shí)現(xiàn)CRC校驗(yàn)計(jì)算

時(shí)間:2023-02-21 00:09:27 計(jì)算機(jī)信息技術(shù) 我要投稿
  • 相關(guān)推薦

用C語(yǔ)言實(shí)現(xiàn)CRC校驗(yàn)計(jì)算

C語(yǔ)言實(shí)現(xiàn)CRC校驗(yàn)計(jì)算

<?xml:nmespce prefix = o ns ="urn:schems-microsoft-com:office:office" />Clcul

tes CRC quickly using the tble-lookup method

 

作  者:董云  YUN DONG

工作單位:黃埔海關(guān)技術(shù)處工程師

通訊地址:廣州市經(jīng)濟(jì)技術(shù)開發(fā)區(qū)志誠(chéng)大道海關(guān)大樓

電話號(hào)碼:020-82130556

郵政編碼:510730

電子郵件: dy168@163.net

 

  要:

簡(jiǎn)述CRC算法原理,給出一種新穎快速的查表計(jì)算方法,并給出用C語(yǔ)言編寫的算法源程序。關(guān)鍵詞:CRC

、多項(xiàng)式、查表法  在編寫數(shù)據(jù)傳輸程序時(shí),數(shù)據(jù)容錯(cuò)是一個(gè)非常重要的問題。循環(huán)冗余位校驗(yàn)(Cyclicl Redundncy Check英文簡(jiǎn)稱CRC)是目前運(yùn)用非常廣泛的一種數(shù)據(jù)容錯(cuò)方法,在數(shù)據(jù)傳輸,數(shù)據(jù)壓縮等領(lǐng)域運(yùn)用極其廣泛。CRC的實(shí)現(xiàn)分為硬件和軟件兩種方法,其中軟件實(shí)現(xiàn)的關(guān)鍵在于計(jì)算速度。如果單純模擬硬件實(shí)現(xiàn)方法,則計(jì)算速度較慢。筆者在編制一個(gè)數(shù)據(jù)通訊軟件中,運(yùn)用了一種新穎的查表法計(jì)算CRC,速度很快,效果極佳。

  首先介紹其原理,如果每次參與CRC計(jì)算的信息為一個(gè)字節(jié),該信息字節(jié)加到16位的累加器中去時(shí),只有累加器的高8位或低8位與信息字節(jié)相互作用(異或),相互作用(異或)的結(jié)果記為組合值,那么累加器中的新值等于組合

值加上(按模2異或)累加器中未改變的那一半即為新的CRC值。

  組合值只有256種可能,因此可利用硬件模擬算法先算好它們的CRC值預(yù)先填入一張表中,該表的每一單元對(duì)應(yīng)相對(duì)值的CRC。這樣就可以通過查表法來(lái)計(jì)算CRC值,以便大大提高CRC運(yùn)算的速度。下面給出用C語(yǔ)言編制的計(jì)算程序。

  首先將CRC

生成多項(xiàng)式及CRC值表定義為一個(gè)頭文件CRC.H

  #define CRC_CCITT 0x1021  //CCITT多項(xiàng)式

    #define REV_CCITT 0x8408  //反轉(zhuǎn)CCITT多項(xiàng)式

    #define CRC16 0x8005      //CRC16

多項(xiàng)式

    #define REV_CRC16 0x

001  //反轉(zhuǎn)CRC16多項(xiàng)式

    unsigned short crc_tble[256]; //CRC值表

注:16CCITT多項(xiàng)式(

X16 +X12 +X5 +1)和16CRC16多項(xiàng)式(X16 +X15 +X2+1)為兩種最常用的CRC多項(xiàng)式。反轉(zhuǎn)多項(xiàng)式是指在數(shù)據(jù)通訊時(shí),信息字節(jié)先傳送或接收低位字節(jié),如重新排位影響CRC計(jì)算速度,故設(shè)反轉(zhuǎn)多項(xiàng)式。

  造表和查表法CRC計(jì)算函數(shù)。

#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)

        &

nbsp;

ccnum=(

ccnum<<=1)^genpoly;

       else 

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

]; 

【用C語(yǔ)言實(shí)現(xiàn)CRC校驗(yàn)計(jì)算】相關(guān)文章:

計(jì)算法簡(jiǎn)單實(shí)現(xiàn)crc校驗(yàn)08-06

用C語(yǔ)言實(shí)現(xiàn)按鈕新技術(shù)08-06

CRC校驗(yàn)實(shí)用程序庫(kù)08-06

C語(yǔ)言實(shí)現(xiàn)串行通信接口程序08-06

用匯編語(yǔ)言實(shí)現(xiàn)BCH解碼校驗(yàn)算法08-06

AVR單片機(jī)CRC校驗(yàn)碼的查表與直接生成08-06

用Verilog HDL實(shí)現(xiàn)I2C總線功能08-06

用TMS320C54X實(shí)現(xiàn)Vertibi譯碼器08-06

用P89C664實(shí)現(xiàn)I2C總線大批量數(shù)據(jù)的自動(dòng)存儲(chǔ)08-06