1. <code id="ya7qu"><span id="ya7qu"><label id="ya7qu"></label></span></code>

    <b id="ya7qu"><bdo id="ya7qu"></bdo></b>
    <wbr id="ya7qu"><optgroup id="ya7qu"><strike id="ya7qu"></strike></optgroup></wbr>
  2. <u id="ya7qu"><bdo id="ya7qu"></bdo></u>
    現在位置:范文先生網>理工論文>計算機信息技術>用C語言實現CRC校驗計算

    用C語言實現CRC校驗計算

    時間:2023-02-21 00:09:27 計算機信息技術 我要投稿
    • 相關推薦

    用C語言實現CRC校驗計算

    C語言實現CRC校驗計算

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

    tes CRC quickly using the tble-lookup method

     

    作  者:董云  YUN DONG

    工作單位:黃埔海關技術處工程師

    通訊地址:廣州市經濟技術開發區志誠大道海關大樓

    電話號碼:020-82130556

    郵政編碼:510730

    電子郵件: dy168@163.net

     

      要:

    簡述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]; //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)

            &

    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語言實現CRC校驗計算】相關文章:

    計算法簡單實現crc校驗08-06

    用C語言實現按鈕新技術08-06

    CRC校驗實用程序庫08-06

    C語言實現串行通信接口程序08-06

    用匯編語言實現BCH解碼校驗算法08-06

    AVR單片機CRC校驗碼的查表與直接生成08-06

    用Verilog HDL實現I2C總線功能08-06

    用TMS320C54X實現Vertibi譯碼器08-06

    用P89C664實現I2C總線大批量數據的自動存儲08-06

    国产福利萌白酱精品tv一区_日韩亚洲中字无码一区二区三区_亚洲欧洲高清无码在线_全黄无码免费一级毛片
    1. <code id="ya7qu"><span id="ya7qu"><label id="ya7qu"></label></span></code>

      <b id="ya7qu"><bdo id="ya7qu"></bdo></b>
      <wbr id="ya7qu"><optgroup id="ya7qu"><strike id="ya7qu"></strike></optgroup></wbr>
    2. <u id="ya7qu"><bdo id="ya7qu"></bdo></u>
      五月网婷婷字幕国产在线观看 | 精品在线国产午夜精品 | 亚洲国产精品综合久久2007 | 又黄又爽又无遮挡国产 | 久久综合香蕉久久久久久久 | 亚洲无遮挡一级精品视频 |