亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? crc.txt

?? 一個(gè)CRC校驗(yàn)算法
?? TXT
字號(hào):
一、循環(huán)冗余校驗(yàn)碼(CRC) 
CRC校驗(yàn)采用多項(xiàng)式編碼方法。被處理的數(shù)據(jù)塊可以看作是一個(gè)n階的二進(jìn)制多項(xiàng)式,由 。如一個(gè)8位二進(jìn)制數(shù)10110101可以表示為: 。多項(xiàng)式乘除法運(yùn)算過(guò)程與普通代數(shù)多項(xiàng)式的乘除法相同。多項(xiàng)式的加減法運(yùn)算以2為模,加減時(shí)不進(jìn),錯(cuò)位,和邏輯異或運(yùn)算一致。 
采用CRC校驗(yàn)時(shí),發(fā)送方和接收方用同一個(gè)生成多項(xiàng)式g(x),并且g(x)的首位和最后一位的系數(shù)必須為1。CRC的處理方法是:發(fā)送方以g(x)去除t(x),得到余數(shù)作為CRC校驗(yàn)碼。校驗(yàn)時(shí),以計(jì)算的校正結(jié)果是否為0為據(jù),判斷數(shù)據(jù)幀是否出錯(cuò)。 
CRC校驗(yàn)可以100%地檢測(cè)出所有奇數(shù)個(gè)隨機(jī)錯(cuò)誤和長(zhǎng)度小于等于k(k為g(x)的階數(shù))的突發(fā)錯(cuò)誤。所以CRC的生成多項(xiàng)式的階數(shù)越高,那么誤判的概率就越小。CCITT建議:2048 kbit/s的PCM基群設(shè)備采用CRC-4方案,使用的CRC校驗(yàn)碼生成多項(xiàng)式g(x)= 。采用16位CRC校驗(yàn),可以保證在  bit碼元中只含有一位未被檢測(cè)出的錯(cuò)誤 。在IBM的同步數(shù)據(jù)鏈路控制規(guī)程SDLC的幀校驗(yàn)序列FCS中,使用CRC-16,其生成多項(xiàng)式g(x)= ;而在CCITT推薦的高級(jí)數(shù)據(jù)鏈路控制規(guī)程HDLC的幀校驗(yàn)序列FCS中,使用CCITT-16,其生成多項(xiàng)式g(x)= 。CRC-32的生成多項(xiàng)式g(x)= 。CRC-32出錯(cuò)的概率比CRC-16低 倍 。由于CRC-32的可靠性,把CRC-32用于重要數(shù)據(jù)傳輸十分合適,所以在通信、計(jì)算機(jī)等領(lǐng)域運(yùn)用十分廣泛。在一些UART通信控制芯片(如MC6582、Intel8273和Z80-SIO)內(nèi),都采用了CRC校驗(yàn)碼進(jìn)行差錯(cuò)控制;以太網(wǎng)卡芯片、MPEG解碼芯片中,也采用CRC-32進(jìn)行差錯(cuò)控制。 
二、CRC校驗(yàn)碼的算法分析 
CRC校驗(yàn)碼的編碼方法是用待發(fā)送的二進(jìn)制數(shù)據(jù)t(x)除以生成多項(xiàng)式g(x),將最后的余數(shù)作為CRC校驗(yàn)碼。其實(shí)現(xiàn)步驟如下: 
設(shè)待發(fā)送的數(shù)據(jù)塊是m位的二進(jìn)制多項(xiàng)式t(x),生成多項(xiàng)式為r階的g(x)。在數(shù)據(jù)塊的末尾添加r個(gè)0,數(shù)據(jù)塊的長(zhǎng)度增加到m+r位,對(duì)應(yīng)的二進(jìn)制多項(xiàng)式為 。 
用生成多項(xiàng)式g(x)去除 ,求得余數(shù)為階數(shù)為r-1的二進(jìn)制多項(xiàng)式y(tǒng)(x)。此二進(jìn)制多項(xiàng)式y(tǒng)(x)就是t(x)經(jīng)過(guò)生成多項(xiàng)式g(x)編碼的CRC校驗(yàn)碼。 
用 以模2的方式減去y(x),得到二進(jìn)制多項(xiàng)式 。 就是包含了CRC校驗(yàn)碼的待發(fā)送字符串。 
從CRC的編碼規(guī)則可以看出,CRC編碼實(shí)際上是將代發(fā)送的m位二進(jìn)制多項(xiàng)式t(x)轉(zhuǎn)換成了可以被g(x)除盡的m+r位二進(jìn)制多項(xiàng)式 ,所以解碼時(shí)可以用接受到的數(shù)據(jù)去除g(x),如果余數(shù)位零,則表示傳輸過(guò)程沒(méi)有錯(cuò)誤;如果余數(shù)不為零,則在傳輸過(guò)程中肯定存在錯(cuò)誤。許多CRC的硬件解碼電路就是按這種方式進(jìn)行檢錯(cuò)的。同時(shí) 可以看做是由t(x)和CRC校驗(yàn)碼的組合,所以解碼時(shí)將接收到的二進(jìn)制數(shù)據(jù)去掉尾部的r位數(shù)據(jù),得到的就是原始數(shù)據(jù)。 
為了更清楚的了解CRC校驗(yàn)碼的編碼過(guò)程,下面用一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明CRC校驗(yàn)碼的編碼過(guò)程。由于CRC-32、CRC-16、CCITT和CRC-4的編碼過(guò)程基本一致,只有位數(shù)和生成多項(xiàng)式不一樣。為了敘述簡(jiǎn)單,用一個(gè)CRC-4編碼的例子來(lái)說(shuō)明CRC的編碼過(guò)程。 
設(shè)待發(fā)送的數(shù)據(jù)t(x)為12位的二進(jìn)制數(shù)據(jù)100100011100;CRC-4的生成多項(xiàng)式為g(x)= ,階數(shù)r為4,即10011。首先在t(x)的末尾添加4個(gè)0構(gòu)成 ,數(shù)據(jù)塊就成了1001000111000000。然后用g(x)去除 ,不用管商是多少,只需要求得余數(shù)y(x)。下表為給出了除法過(guò)程。 
除數(shù)次數(shù) 被除數(shù)/ g(x)/結(jié)果    余數(shù) 
0  1 001000111000000 100111000000 
1 0011 
0 000100111000000 
1  1 00111000000  1000000 
1 0011  
0 00001000000 
2  1 000000 1100 
1 0011 
0 001100 

從上面表中可以看出,CRC編碼實(shí)際上是一個(gè)循環(huán)移位的模2運(yùn)算。對(duì)CRC-4,我們假設(shè)有一個(gè)5 bits的寄存器,通過(guò)反復(fù)的移位和進(jìn)行CRC的除法,那么最終該寄存器中的值去掉最高一位就是我們所要求的余數(shù)。所以可以將上述步驟用下面的流程描述: 
//reg是一個(gè)5 bits的寄存器 
把reg中的值置0. 
把原始的數(shù)據(jù)后添加r個(gè)0. 
While (數(shù)據(jù)未處理完) 
Begin 
If (reg首位是1) 
reg = reg XOR 0011. 
把reg中的值左移一位,讀入一個(gè)新的數(shù)據(jù)并置于register的0 bit的位置。 
End 
reg的后四位就是我們所要求的余數(shù)。 
這種算法簡(jiǎn)單,容易實(shí)現(xiàn),對(duì)任意長(zhǎng)度生成多項(xiàng)式的G(x)都適用。在發(fā)送的數(shù)據(jù)不長(zhǎng)的情況下可以使用。但是如果發(fā)送的數(shù)據(jù)塊很長(zhǎng)的話,這種方法就不太適合了。它一次只能處理一位數(shù)據(jù),效率太低。為了提高處理效率,可以一次處理4位、8位、16位、32位。由于處理器的結(jié)構(gòu)基本上都支持8位數(shù)據(jù)的處理,所以一次處理8位比較合適。 
為了對(duì)優(yōu)化后的算法有一種直觀的了解,先將上面的算法換個(gè)角度理解一下。在上面例子中,可以將編碼過(guò)程看作如下過(guò)程: 
由于最后只需要余數(shù),所以我們只看后四位。構(gòu)造一個(gè)四位的寄存器reg,初值為0,數(shù)據(jù)依次移入reg0(reg的0位),同時(shí)reg3的數(shù)據(jù)移出reg。有上面的算法可以知道,只有當(dāng)移出的數(shù)據(jù)為1時(shí),reg才和g(x)進(jìn)行XOR運(yùn)算;移出的數(shù)據(jù)為0時(shí),reg不與g(x)進(jìn)行XOR運(yùn)算,相當(dāng)與和0000進(jìn)行XOR運(yùn)算。就是說(shuō),reg和什么樣的數(shù)據(jù)進(jìn)行XOR移出的數(shù)據(jù)決定。由于只有一個(gè)bit,所以有 種選擇。上述算法可以描述如下, 
//reg是一個(gè)4 bits的寄存器 
初始化t[]={0011,0000} 
把reg中的值置0. 
把原始的數(shù)據(jù)后添加r個(gè)0. 
While (數(shù)據(jù)未處理完) 
Begin 
把reg中的值左移一位,讀入一個(gè)新的數(shù)據(jù)并置于register的0 bit的位置。 
reg = reg XOR t[移出的位] 
End 
上面算法是以bit為單位進(jìn)行處理的,可以將上述算法擴(kuò)展到8位,即以Byte為單位進(jìn)行處理,即CRC-32。構(gòu)造一個(gè)四個(gè)Byte的寄存器reg,初值為0x00000000,數(shù)據(jù)依次移入reg0(reg的0字節(jié),以下類(lèi)似),同時(shí)reg3的數(shù)據(jù)移出reg。用上面的算法類(lèi)推可知,移出的數(shù)據(jù)字節(jié)決定reg和什么樣的數(shù)據(jù)進(jìn)行XOR。由于有8個(gè)bit,所以有 種選擇。上述算法可以描述如下: 
//reg是一個(gè)4 Byte的寄存器 
初始化t[]={…}//共有 =256項(xiàng) 
把reg中的值置0. 
把原始的數(shù)據(jù)后添加r/8個(gè)0字節(jié). 
While (數(shù)據(jù)未處理完) 
Begin 
把reg中的值左移一個(gè)字節(jié),讀入一個(gè)新的字節(jié)并置于reg的第0個(gè)byte的位置。 
reg = reg XOR t[移出的字節(jié)] 
End 
算法的依據(jù)和多項(xiàng)式除法性質(zhì)有關(guān)。如果一個(gè)m位的多項(xiàng)式t(x)除以一個(gè)r階的生成多項(xiàng)式g(x), ,將每一位 (0= <k <m)提出來(lái),在后面不足r個(gè)0后,單獨(dú)去除g(x),得到的余式位 。則將 后得到的就是t(x)由生成多項(xiàng)式g(x)得到的余式。對(duì)于CRC-32,可以將每個(gè)字節(jié)在后面補(bǔ)上32個(gè)0后與生成多項(xiàng)式進(jìn)行運(yùn)算,得到余式和此字節(jié)唯一對(duì)應(yīng),這個(gè)余式就是上面算法種t[]中的值,由于一個(gè)字節(jié)有8位,所以t[]共有 =256項(xiàng)。多項(xiàng)式運(yùn)算性質(zhì)可以參見(jiàn)參考文獻(xiàn)[1]。這種算法每次處理一個(gè)字節(jié),通過(guò)查表法進(jìn)行運(yùn)算,大大提高了處理速度,故為大多數(shù)應(yīng)用所采用。 
三、CRC-32的程序?qū)崿F(xiàn)。 
為了提高編碼效率,在實(shí)際運(yùn)用中大多采用查表法來(lái)完成CRC-32校驗(yàn),下面是產(chǎn)生CRC-32校驗(yàn)嗎的子程序。 
unsigned long  crc_32_tab[256]={ 
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,0x0edb8832,…, 0x5a05df1b, 0x2d02ef8d 
};//事先計(jì)算出的參數(shù)表,共有256項(xiàng),未全部列出。 

unsigned long GenerateCRC32(char xdata * DataBuf,unsigned long  len) 
{ 
unsigned long oldcrc32; 
unsigned long crc32; 
unsigned long oldcrc; 
unsigned  int charcnt; 
        char c,t; 
oldcrc32 = 0x00000000; //初值為0 
    charcnt=0; 
while (len--) { 
                t= (oldcrc32 >> 24) & 0xFF;  //要移出的字節(jié)的值 
oldcrc=crc_32_tab[t];        //根據(jù)移出的字節(jié)的值查表 
                c=DataBuf[charcnt];          //新移進(jìn)來(lái)的字節(jié)值 
                oldcrc32= (oldcrc32 < < 8) | c;  //將新移進(jìn)來(lái)的字節(jié)值添在寄存器末字節(jié)中 
                oldcrc32=oldcrc32^oldcrc;    //將寄存器與查出的值進(jìn)行xor運(yùn)算 
                charcnt++; 
} 
        crc32=oldcrc32; 
        return crc32; 
} 
參數(shù)表可以先在PC機(jī)上算出來(lái),也可在程序初始化時(shí)完成。下面是用于計(jì)算參數(shù)表的c語(yǔ)言子程序,在Visual C++ 6.0下編譯通過(guò)。 
#include <stdio.h> 
unsigned long int crc32_table[256]; 
unsigned long int ulPolynomial = 0x04c11db7; 
unsigned long int Reflect(unsigned long int ref, char ch) 
{ unsigned long int value(0); 
// 交換bit0和bit7,bit1和bit6,類(lèi)推 
for(int i = 1; i < (ch + 1); i++) 
{ if(ref & 1) 
value |= 1 < < (ch - i); 
    ref >>= 1; } 
return value; 
} 
init_crc32_table() 
{ unsigned long int crc,temp; 
// 256個(gè)值 
for(int i = 0; i <= 0xFF; i++) 
{  temp=Reflect(i, 8); 
crc32_table[i]= temp < < 24; 
for (int j = 0; j < 8; j++){ 
    unsigned long int t1,t2; 
unsigned long int flag=crc32_table[i]&0x80000000; 
t1=(crc32_table[i] < < 1); 
if(flag==0) 
  t2=0; 
else 
  t2=ulPolynomial; 
crc32_table[i] =t1^t2 ; } 
crc=crc32_table[i]; 
crc32_table[i] = Reflect(crc32_table[i], 32); 
} 
} 
結(jié)束語(yǔ) 
    CRC校驗(yàn)由于實(shí)現(xiàn)簡(jiǎn)單,檢錯(cuò)能力強(qiáng),被廣泛使用在各種數(shù)據(jù)校驗(yàn)應(yīng)用中。占用系統(tǒng)資源少,
用軟硬件均能實(shí)現(xiàn),是進(jìn)行數(shù)據(jù)傳輸差錯(cuò)檢測(cè)地一種很好的手段。 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九九视频精品免费| 国产精品久久久久桃色tv| 亚洲成人av免费| 欧美日韩aaaaaa| 日韩综合一区二区| 欧美电视剧在线观看完整版| 狠狠色狠狠色综合| 国产精品丝袜久久久久久app| 国产69精品久久久久777| 国产精品视频免费看| 一本一本大道香蕉久在线精品| 亚洲一区二区在线播放相泽| 在线电影欧美成精品| 国内成人精品2018免费看| 国产午夜亚洲精品午夜鲁丝片| 成人精品小蝌蚪| 亚洲国产日韩一级| 日韩精品一区二区在线| 成人综合婷婷国产精品久久免费| 亚洲精品免费播放| 欧美一区二区在线播放| 国产精品亚洲视频| 成人黄色电影在线| 亚洲综合色区另类av| 日韩视频一区二区三区| jvid福利写真一区二区三区| 亚洲国产成人精品视频| 精品国产乱码久久久久久蜜臀| 成人免费视频app| 天天亚洲美女在线视频| 国产欧美一区二区精品忘忧草| 欧美在线免费视屏| 国产精品资源网| 亚洲一区二区三区影院| 国产色一区二区| 欧美精品在线观看一区二区| 国产成人av网站| 肉丝袜脚交视频一区二区| 中文字幕欧美激情| 91精品国产综合久久精品性色| 高清不卡在线观看| 美女爽到高潮91| 一区二区三区免费看视频| 精品福利av导航| 欧洲中文字幕精品| 成人国产一区二区三区精品| 蜜臀久久99精品久久久画质超高清 | 成人免费在线播放视频| 欧美一区永久视频免费观看| 91香蕉国产在线观看软件| 国模少妇一区二区三区| 天堂成人国产精品一区| 国产精品久久久久婷婷| 久久久美女毛片| 欧美一区二区三区婷婷月色| 91久久国产最好的精华液| 国产成人精品www牛牛影视| 免费成人在线影院| 亚洲国产一区二区三区青草影视| 中文一区一区三区高中清不卡| 日韩欧美电影一区| 欧美日韩一区小说| 欧美综合一区二区| 91麻豆文化传媒在线观看| 成人一区二区三区视频在线观看| 精品一区二区在线视频| 秋霞电影网一区二区| 午夜激情一区二区| 午夜精品aaa| 丝袜亚洲精品中文字幕一区| 亚洲午夜久久久久久久久电影网| 亚洲精品福利视频网站| 一区精品在线播放| 国产精品成人网| 亚洲欧洲美洲综合色网| 国产精品福利在线播放| 国产精品久久三| 一色屋精品亚洲香蕉网站| ㊣最新国产の精品bt伙计久久| 国产精品国产成人国产三级| 成人免费视频在线观看| 成人欧美一区二区三区白人| 亚洲免费在线观看| 一区二区免费在线| 性做久久久久久久免费看| 日韩国产欧美在线播放| 免费日韩伦理电影| 精品一区二区免费在线观看| 国产在线精品一区二区夜色 | 国产精品69毛片高清亚洲| 国产一区美女在线| 国产91综合一区在线观看| 成人精品视频一区二区三区| 成人a区在线观看| 欧美中文字幕一区| 69堂成人精品免费视频| 欧美精品一区二区三区视频| 国产日韩欧美精品在线| 亚洲欧美自拍偷拍色图| 性久久久久久久久| 精品午夜久久福利影院| 成人黄色国产精品网站大全在线免费观看| 成人av在线播放网站| 91九色02白丝porn| 日韩欧美国产午夜精品| 国产蜜臀97一区二区三区| 亚洲精品老司机| 美国三级日本三级久久99| 国产精品综合一区二区三区| 97精品久久久午夜一区二区三区| 欧美视频在线观看一区二区| 欧美一三区三区四区免费在线看| 国产色一区二区| 亚洲国产裸拍裸体视频在线观看乱了 | 色国产精品一区在线观看| 欧美日韩一区三区四区| 久久久国产精华| 亚洲亚洲精品在线观看| 久久成人免费网站| 91热门视频在线观看| 日韩免费性生活视频播放| 国产精品久久毛片| 日韩av中文字幕一区二区| 成人一区在线看| 日韩午夜精品视频| 亚洲欧美日本在线| 激情偷乱视频一区二区三区| 色嗨嗨av一区二区三区| 久久精品亚洲一区二区三区浴池| 亚洲图片欧美一区| www.日韩在线| 精品少妇一区二区三区日产乱码 | 国产精品羞羞答答xxdd| 在线精品视频一区二区| 久久女同性恋中文字幕| 亚洲gay无套男同| www.亚洲在线| 久久久国际精品| 日本不卡一区二区三区| 在线免费观看日本一区| 欧美激情一区在线观看| 老司机精品视频导航| 欧美色精品在线视频| 亚洲婷婷综合色高清在线| 国产河南妇女毛片精品久久久| 欧美精品xxxxbbbb| 亚洲精品国产精华液| 成人h动漫精品一区二| 亚洲精品一区二区三区香蕉 | 亚洲黄一区二区三区| 国产成人av在线影院| 精品福利一二区| 看电视剧不卡顿的网站| 7777精品伊人久久久大香线蕉完整版 | 91成人免费电影| 国产精品国产三级国产普通话99 | 国产精品护士白丝一区av| 国产精品资源在线| 久久中文字幕电影| 久久国产人妖系列| 日韩三级视频在线看| 亚洲成人在线免费| 欧美三级电影一区| 亚洲国产一区二区视频| 91成人免费电影| 亚洲图片有声小说| 欧美日韩视频在线第一区 | 精品国产乱码久久久久久久 | 国产麻豆精品在线| 久久精品一区八戒影视| 国产不卡高清在线观看视频| 欧美国产一区视频在线观看| 国产91综合网| 亚洲人成7777| 欧美在线一二三四区| 亚洲电影在线免费观看| 欧美乱妇一区二区三区不卡视频| 五月激情丁香一区二区三区| 91精品国产综合久久蜜臀| 日韩成人伦理电影在线观看| 欧美成人一区二区三区在线观看 | 欧美亚洲禁片免费| 亚洲18影院在线观看| 日韩一卡二卡三卡四卡| 韩国v欧美v亚洲v日本v| 中国色在线观看另类| 91日韩精品一区| 日韩电影网1区2区| 久久综合精品国产一区二区三区 | 精品国产3级a| 成人污视频在线观看| 亚洲色图欧洲色图婷婷| 精品污污网站免费看| 蜜臀精品一区二区三区在线观看 | 丝瓜av网站精品一区二区 | 国产91对白在线观看九色| 亚洲精品欧美激情| 91麻豆精品国产91久久久 | 日韩免费观看高清完整版| 国产美女视频91|