一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

CRC32校驗(yàn)算法C語言版(查表法)

 刀首木 2017-03-29

最近用到CRC校驗(yàn)算法,就找了些資料,學(xué)習(xí)了一下,網(wǎng)上關(guān)于CRC32的資料也多,但感覺不是很完整,或者太高深。

CRC算法查表法很常見,但表是怎么來的,有些資料說得不很清楚。

我來說一下我的看法:

1.CRC校驗(yàn)變化太多,有CRC4/5/6/7/8/16/32,每一種的多項(xiàng)式也有很多種變化,并不是一成不變的;

2.輸入輸出方式也有區(qū)別,有一些初始值是0,有一些初始值是0xFFFFFFFF,有一些直接返回,有一些異或返回。

因此,CRC校驗(yàn)很難用一個(gè)代碼兼容全部,只能根據(jù)項(xiàng)目需要修改相關(guān)參數(shù)了。


計(jì)算方法:

1.先要知道多項(xiàng)式是什么樣子,以這個(gè)IEEE802.3標(biāo)準(zhǔn)CRC32多項(xiàng)式為例:x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x+ 1

2.轉(zhuǎn)換成一個(gè)值(這個(gè)值的命名我不知道?。?/span>

  x32  則對(duì)應(yīng)32bit = 1, x26 則對(duì)應(yīng)26bit=1,得出一個(gè)值:(1<<32)|(1<<26)|(1<<23)|(1<<22)|...|(1<<1)|(1)=0x104C11DB7,對(duì)于CRC32取低32位,則=0x4C11DB7

3.用這個(gè)值通過一定方法生成長度為256的碼表,對(duì)于CRC32表內(nèi)每個(gè)元素都為32bit.

4.用一定的方法查表得出CRC32值。


好了,可以貼代碼了:

  1. /* 
  2. * CRC校驗(yàn)算法,查表法 
  3.  
  4. */  
  5. #include 'crc.h'  
  6.   
  7. static unsigned long table[256];  
  8.   
  9. //位逆轉(zhuǎn)  
  10. static unsigned long bitrev(unsigned long input, int bw)  
  11. {  
  12.     int i;  
  13.     unsigned long var;  
  14.     var = 0;  
  15.     for(i=0;i
  16.     {  
  17.         if(input & 0x01)  
  18.         {  
  19.             var |= 1<<(bw-1-i);  
  20.         }  
  21.         input>>=1;  
  22.     }  
  23.     return var;  
  24. }  
  25.   
  26. //碼表生成  
  27. //如:X32+X26+...X1+1,poly=(1<<26)|...|(1<<1)|(1<<0)  
  28. void crc32_init(unsigned long poly)  
  29. {  
  30.     int i;  
  31.     int j;  
  32.     unsigned long c;  
  33.       
  34.     poly=bitrev(poly,32);  
  35.     for(i=0; i<256; i++)  
  36.     {  
  37.         c = i;  
  38.         for (j=0; j<8; j++)  
  39.         {  
  40.             if(c&1)  
  41.             {  
  42.                 c=poly^(c>>1);  
  43.             }  
  44.             else  
  45.             {  
  46.                 c=c>>1;  
  47.             }  
  48.         }  
  49.         table[i] = c;  
  50.     }  
  51. }  
  52.   
  53. unsigned long crc32(unsigned long crc, void* input, int len)  
  54. {  
  55.     int i;  
  56.     unsigned char index;  
  57.     unsigned char* pch;  
  58.     pch = (unsigned char*)input;  
  59.     for(i=0;i
  60.     {  
  61.         index = (unsigned char)(crc^*pch);  
  62.         crc = (crc>>8)^table[index];  
  63.         pch++;  
  64.     }  
  65.     return crc;  
  66. }  
/** CRC校驗(yàn)算法,查表法* */#include 'crc.h'static unsigned long table[256];//位逆轉(zhuǎn)static unsigned long bitrev(unsigned long input, int bw){ int i; unsigned long var; var = 0; for(i=0;i>=1; } return var;}//碼表生成//如:X32+X26+...X1+1,poly=(1<<26)|...|(1<<1)|(1<<0)void crc32_init(unsigned long poly){ int i; int j; unsigned long c; poly=bitrev(poly,32); for(i=0; i<256; i++) { c = i; for (j=0; j<8; j++) { if(c&1) { c=poly^(c>>1); } else { c=c>>1; } } table[i] = c; }}unsigned long crc32(unsigned long crc, void* input, int len){ int i; unsigned char index; unsigned char* pch; pch = (unsigned char*)input; for(i=0;i>8)^table[index]; pch++; } return crc;}



測試用例:

  1. void main(void)  
  2. {  
  3.     unsigned long crc;  
  4.     crc32_init(0x4C11DB7,table);  
  5.   
  6.     crc = 0xFFFFFFFF;  
  7.     crc=crc32(crc,'1234567890',10);  
  8.     crc ^= 0xFFFFFFFF;  
  9.     printf('CRC32=%08X\n',crc);  
  10.     system('pause');  
  11. }  
void main(void){ unsigned long crc; crc32_init(0x4C11DB7,table); crc = 0xFFFFFFFF; crc=crc32(crc,'1234567890',10); crc ^= 0xFFFFFFFF; printf('CRC32=%08X\n',crc); system('pause');}

計(jì)算結(jié)果:

CRC32=0x261DAEE5



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    成人精品网一区二区三区| 深夜日本福利在线观看| 加勒比日本欧美在线观看| 国产不卡的视频在线观看| 日韩中文字幕视频在线高清版| 成人精品日韩专区在线观看| 人妻巨大乳一二三区麻豆| 欧美丝袜诱惑一区二区| 日本熟妇熟女久久综合| 免费一级欧美大片免费看| 最新国产欧美精品91| 黄色日韩欧美在线观看| 亚洲精品日韩欧美精品| 国产精品亚洲综合色区韩国 | 老鸭窝精彩从这里蔓延| 国产高清在线不卡一区| 国产精品久久精品国产| 国产情侣激情在线对白| 国产欧美日韩在线精品一二区| 亚洲国产精品av在线观看| 欧美日韩在线第一页日韩| 国产一区二区精品高清免费| 日本少妇中文字幕不卡视频| 亚洲黄片在线免费小视频| 亚洲一区二区亚洲日本| 丝袜视频日本成人午夜视频| 亚洲精品国男人在线视频| 国产一区二区三区精品免费| 一个人的久久精彩视频| 亚洲高清一区二区高清| 高清在线精品一区二区| 亚洲日本加勒比在线播放| 午夜福利精品视频视频| 欧美日韩综合在线精品| 欧美国产日本免费不卡| 亚洲国产91精品视频| 91欧美亚洲精品在线观看| 国产又爽又猛又粗又色对黄| 久久精品国产亚洲av麻豆尤物 | 国产精品内射视频免费| 欧美一区二区三区99|