




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、標準CRC生成多項式如下表:名稱CRC-4CRC-8CRC-8CRC-8CRC-12CRC-16生成多項式 x4+x+1 x8+x5+x4+1 x8+x2+x1+1x8+x6+x4+x3+x2+x1 x12+x11+x3+x+1 x16+x15+x2+1簡記式*標準引用3 ITU G.7040x310x070x5E80F8005 IBM SDLCCRC16-CCITT x16+x12+x5+11021 ISO HDLC, ITU X.25, V.34/V.41/V.42,PPP-FCSCRC-32 x32+x26+x23+.+x2+x+104C11DB7 ZIP, RAR, IEEE 802
2、LAN/FDDI, IEEE1394, PPP-FCSCRC-32c x32+x28+x27+.+x8+x6+1 1EDC6F41 SCTP生成多項式的最高位固定的 1,故在簡記式中忽略最高位1 了,如0x1021實際是0x11021。I、基本算法(人工筆算):以CRC16-CCITT為例進行說明,CRC校驗碼為16位,生成多項式17位。假如數據流為4 字節:BYTE3、BYTE2、BYTE1、BYTE0;數據流左移16位,相當于擴大256X256倍,再除以生成多項式 0x11021,做不借位的除法 運算(相當于按位異或),所得的余數就是CRC校驗碼。發送時的數據流為 6 字節:BYTE3、B
3、YTE2、BYTE1、BYTE0、CRC1、CRC0;II、計算機算法1 (比特型算法):1)將擴大后的數據流(6字節)高16位(BYTE3、BYTE2)放入一個長度為16的寄存 器;2)如果寄存器的首位為1,將寄存器左移1位(寄存器的最低位從下一個字節獲得),再與生成多項式的簡記式異或;否則僅將寄存器左移1位(寄存器的最低位從下一個字節獲得);3)重復第2步,直到數據流(6字節)全部移入寄存器;4)寄存器中的值則為 CRC校驗碼CRC1、CRC0。III、計算機算法2 (字節型算法):256An表示256的n次方把按字節排列的數據流表示成數學多項式,設數據流為BYTE nBYTEn 1BYT
4、E n 2 、BYTE1BYTE0,表示成數學表達式為BYTEn X256An+BYTEn-1 256人(n-1)+.+BYTE1*256+BYTE0,在這里+表示為異或運算。設生成多項式為G17 ( 17bit),CRC 碼為 CRC16。貝打CRC16 =(BYTEn X56An+BYTEn-1 256人(n-1)+.+BYTE1256+BYTE0) X56A2/G17,即數據流左移16位,再除以生成多項式G17。先變換BYTEn-1、BYTEn-1擴大后的形式,CRC16 =BYTEn X256An X56A2/G17+BYTEn-1 256A(n-1) 2X6A2/G17+.+BYTE
5、1 25X 乂56人2心17 +BYTE0 X256A2/G17(Zn+Yn/G17) 256人n+BYTEn-1 256人(n-1) 256A2/G17+.+BYTE125X X?56A2/G17+BYTE0 X256A2/G17Zn 256An+Yn 256/G17+BYTEn-1 256人217 256人(n-1)+.+BYTE1 256X256A2/G1 7+BYTE0 X256A2/G17Zn 256An+(YH8n256+YHLn) X256/G17+BYTEn-1 256A2/G17 256人(n-1)+.+BYTE1 256 256A2/G17+BYTE0256A2/G17Zn
6、 256An+YHLn X256/G17+(YH8n+BYTEn-1)256A2/G17 256人(n-1)+.+BYTE1256 X256A2/G17+BYTE0256人2心17這樣就推導出,BYTEn-1字節的CRC校驗碼為YHLn X256/G17+(YH8n+BYTEn-1)256A2/G17,即上一字節 CRC 校驗碼 Yn的高 8位(YH8n)與本字節 BYTEn-1異或,該結果單獨計算 CRC校驗碼(即單字節的16位CRC校驗碼,對單字節可建立表格, 預 先生成對應的16位CRC校驗碼),所得的CRC校驗碼與上一字節 CRC校驗碼Yn的低8 位(YL8n)乘以256 (即左移8位
7、)異或。然后依次逐個字節求出CRC,直到BYTEO。字節型算法的一般描述為:本字節的CRC碼,等于上一字節 CRC碼的低8位左移8位,與上一字節CRC右移8位同本字節異或后所得的CRC碼異或。字節型算法如下:1) CRC寄存器組初始化為全O(OxOOOO)。(注意:CRC寄存器組初始化全為 1時,最后 CRC應取反。)2) CRC寄存器組向左移 8位,并保存到CRC寄存器組。3) 原CRC寄存器組高8位(右移8位)與數據字節進行異或運算,得出一個指向值表的 索引。4) 索引所指的表值與 CRC寄存器組做異或運算。5) 數據指針加1,如果數據沒有全部處理完,則重復步驟2)。6) 得出CRC。un
8、 sig ned short GetCrc_16( un sig ned char * pData, int nLen gth)/函數功能:計算數據流* pData的16位CRC校驗碼,數據流長度為nLengthunsigned short cRc_16 = 0x0000;/ 初始化while( nLe ngth0)cRc_16 = (cRc_16 8) A *pData) & 0xff; cRctable_16表由函數mK_cRctable生成nLen gth-;pData+;return cRc_16;void mK_cRctable( un sig ned short gEn poly)
9、II函數功能:生成 0 255對應的16CRC校驗碼,其實就是計算機算法1 (比特型算法)gEnpoly為生成多項式注意,低位先傳送時,生成多項式應反轉(低位與高位互換)。如CRC16-CCITT為0x1021 ,反轉后為0x8408un sig ned short cRc_16=0;un sig ned short i,j,k;for(i=0,k=0;i256;i+,k+)cRc_16 = i0;j-)if(cRc_16&0x8000)/反轉時 cRc_16&0x0001cRc_16=(cRc_16=1)AgEnpolyelsecRc_16=1cRctable_16k = cRc_16;這幾
10、天研究了一下CRC算法,碰到了一些問題,研究了一下,小有心得。CRC算法是在通訊領域廣泛采用的校驗算法。原理我就不說了,這 里說一下簡單的程序實現。以下均采用CRC多項式為0x1021即:g(x) = x16+x12+x5+xO;CRC的基本原理就不說了,那個搜一下就有了。最基本的算法應該是按位計算了,這個方法可以適用于所有長度的 數據校驗,最為靈活,但由于是按位計算,其效率并不是最優,只適用于對速度 不敏感的場合?;镜乃惴ㄈ缦拢簎n sig ned short do_crc_16( un sig ned char *message, un sig ned in t le n) 一 一int
11、 i, j;un sig ned short crc_reg = 0;un sig ned short curre nt;for (i = 0; i len; i+)curre nt = messagei 8;for (j = 0; j 8; j+)if (short)(crc_reg A curre nt) 0)crc_reg = (crc_reg 1) a 0x1021; elsecrc_reg = 1; current 8; /* 以 8 位二進制數的形式暫 存CRC勺高8位*/crc0)fcs = (fcs 8) A crc16_ccitt_table(fcs A *pData) &
12、Oxff;nLength-; pData+;return fcs;/ 取反 檢驗的時候,只要用以下方法就可以int IsCrc16Good(unsigned char* pData, int nLength)unsigned short fcs = Oxffff;/ 初始化while(nLengthO)fcs = (fcs 8) Acrc16_ccitt_table(fcs A *pData) &Oxff;nLength-; pData+;/ return ();/ 0xf0b8 是 CRC-ITU的Magic Valueif(fcs = 0xf0b8)return 1;elsereturn
13、-1;返回 1 則數據無誤,否則數據錯誤。其表的生成方法也比較簡單, 對于前一種查表方法, 其生成表的算法可以由按位 生成算法來計算得到,對0255的字節進行CRC校驗,得到的校驗值分別做為 表的相應項。對于后一種查表方法,其碼表可以由以下方法計算得到,void crc16_ccitt()unsigned char index = 0;unsigned short to_xor;int i;printf(unsigned short crc16_ccitt_table256 =n);while (1)if (!(index % 8)printf(n);to_xor = index;for (i
14、 = 0; i 1) A 0x8408;elseto_xor = 1;printf(0x%04x, to_xor);if (index = 255)printf(n); break;elseprintf(, ); index+;prin tf(;); /return 0;這樣,對CR(算法算是有一個新的認識了,至少是分清了對于同一個多項式, 為 什么會有不同的計算方法。弄清后,就會明白在什么場合用什么樣的算法。#6 生成 crc32貼子回復于:2007-3-14 21:03:35/*生成下面的crc32 表unsignedchari,j;unsignedlongcrc,crc32_table2
15、56;for(i0;256;i+)i;crc*/forcode unsigned(jifelsecrc32_tablei0;8;j+)(crc1)crccrc(crc=1;crc;long crc32_table2561)人 0xEDB88320;OxOOOOOOOOL,0x706af48fL,0xe0d5e91eL,0x90bf1d91L,0x1adad47dL,0x646ba8c0L,0xfa0f3d63L,0xa2677172L,0x35b5a8faL,0x45df5c75L,0xc8d75180L,0xb8bda50fL,0x2f6f7c87L,0x01db7106L,0x9fbfe4
16、a5L,0xe10e9818L,0x77073096L,0xe963a535L,0x97d2d988L,0x1db71064L,0x6ddde4ebL,0xfd62f97aL,0x8d080df5L,0x3c03e4d1L,0x42b2986cL,0xdcd60dcfL,0xbfd06116L,0x2802b89eL,0x58684c11L,0x98d220bcL,0xe8b8d433L,0x7f6a0dbbL,0xee0e612cL,0x9e6495a3L,0x09b64c2bL,0x6ab020f2L,0xf4d4b551L,0x8a65c9ecL,0x3b6e20c8L,0x4b04d4
17、47L,0xdbbbc9d6L,0xabd13d59L,0x21b4f4b5L,0x5f058808L,0xc1611dabL,0xefd5102aL,0x7807c9a2L,0x086d3d2dL, 0x990951baL, 0x0edb8832L, 0x7eb17cbdL, 0xf3b97148L, 0x83d385c7L, 0x14015c4fL, 0x4c69105eL, 0xd20d85fdL, 0xacbcf940L, 0x26d930acL, 0x56b3c423L, 0xc60cd9b2L, 0xb6662d3dL, 0x71b18589L, 0x0f00f934L, 0x91
18、646c97L,0x076dc419L,0x79dcb8a4L,0xe7b82d07L,0x84be41deL,0x136c9856L,0x63066cd9L,0xd56041e4L,0xa50ab56bL,0x32d86ce3L,0x51de003aL,0xcfba9599L,0xb10be924L,0x76dc4190L,0x06b6b51fL,0x9609a88eL,0xe6635c01L, 0x1b01a57bL, 0x8bbeb8eaL, 0xfbd44c65L, 0x4adfa541L, 0x346ed9fcL, 0xaa0a4c5fL, 0xc90c2086L, 0x5edef9
19、0eL, 0x2eb40d81L, 0x03b6e20cL, 0x73dc1683L, 0xe40ecf0bL, 0x8708a3d2L, 0x196c3671L, 0x67dd4accL, 0xd6d6a3e8L, 0xa6bc5767L, 0x36034af6L, 0x4669be79L, 0xcc0c7795L, 0xb2bd0b28L, 0x2cd99e8bL, 0x026d930aL, 0x95bf4a82L, 0xe5d5be0dL, 0x68ddb3f8L, 0x18b74777L, 0x8f659effL, 0xd70dd2eeL, 0x4969474dL, 0x37d83bf
20、0L, 0xbdbdf21cL, 0xcdd70693L, 0x5d681b02L, 0x2d02ef8dL 0x8208f4c1L, 0xfcb9887cL, 0x4db26158L, 0x3dd895d7L, 0xad678846L, 0xdd0d7cc9L, 0x5768b525L, 0x29d9c998L, 0xb7bd5c3bL, 0x74b1d29aL, 0xe3630b12L, 0x9309ff9dL, 0x1e01f268L, 0x6e6b06e7L, 0xf9b9df6fL, 0xa1d1937eL, 0x3fb506ddL, 0x41047a60L, 0xcb61b38cL
21、, 0xbb0b4703L, 0x2bb45a92L, 0x5bdeae1dL, 0x9c0906a9L, 0xe2b87a14L, 0x7cdcefb7L, 0x1fda836eL, 0x88085ae6L, 0xf862ae69L, 0x4e048354L, 0x3e6e77dbL, 0xa9bcae53L, 0xcabac28aL, 0x54de5729L, 0x2a6f2b94L, 0xf50fc457L, 0x62dd1ddfL, 0x3ab551ceL, 0xa4d1c46dL, 0xda60b8d0L, 0x5005713cL, 0x206f85b3L, 0xb0d09822L,
22、 0xc0ba6cadL, 0xead54739L, 0x94643b84L, 0x0a00ae27L, 0x6906c2feL, 0xfed41b76L, 0x8ebeeff9L, 0x38d8c2c4L, 0x48b2364bL, 0xdf60efc3L, 0xbc66831aL, 0x220216b9L, 0x5cb36a04L, 0x9b64c2b0L, 0xeb0e363fL, 0x7bb12baeL, 0x0bdbdf21L, 0x81be16cdL, 0xff0f6a70L, 0x616bffd3L, 0x3903b3c2L, 0xaed16a4aL, 0xdebb9ec5L,
23、0x53b39330L, 0x23d967bfL, 0xb40bbe37L, 0x65b0d9c6L, 0x15da2d49L, 0xa3bc0074L, 0xd3d6f4fbL, 0x44042d73L, 0x270241aaL, 0xb966d409L, 0xc7d7a8b4L, 0xedb88320L, 0x9dd277afL, 0x0d6d6a3eL, 0x7d079eb1L, 0xf762575dL, 0x89d32be0L, 0x17b7be43L, 0x4fdff252L, 0xd80d2bdaL, 0xa867df55L, 0x256fd2a0L, 0x5505262fL, 0xc2d7ffa7L, 0xec63f226L, 0x72076785L, 0x0cb61b38L, 0x86d3d2d4L, 0xf6b9265bL, 0x66063bcaL, 0x166ccf45L, 0xa7672661L, 0xd9d65adcL, 0x47b2cf7fL, 0x24b4a3a6L, 0xb3667a2eL, 0xc30c8ea1L, 0x12b7e950L, 0x8cd37cf3L, 0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國管珠門簾市場分析及競爭策略研究報告
- 2025至2030年中國端子測力器市場分析及競爭策略研究報告
- 2025至2030年中國空氣再生機行業發展研究報告001
- 2025至2030年中國磁竹塑身內衣行業發展研究報告
- 2025至2030年中國碳素予氧纖維盤根市場現狀分析及前景預測報告
- 2025至2030年中國碗/盤架市場分析及競爭策略研究報告
- 2025至2030年中國真空吸氣平印臺市場現狀分析及前景預測報告
- 2025至2030年中國省電電燈起動器市場調查研究報告
- 中式快餐加盟合同樣本
- 2024年國網綜合能源服務集團有限公司招聘高校畢業生6人(第二批)筆試參考題庫附帶答案詳解
- 藥品行業新員工合規培訓
- 腹膜透析護理查房
- 2025-2030中國風能風電行業發展前景及發展策略與投資風險研究報告
- 九江市電梯安全管理人員會考練習卷以及答案
- (安全生產)安全體驗館
- 2024年檔案管理實務重點試題及答案
- 五四紅旗團支部
- 影視劇組聘請工作人員合同二零二五年
- 2025年審廠檢驗總結報告
- 2024年中國聯通延安市分公司招聘筆試真題
- 2025年寧夏中考試題及答案
評論
0/150
提交評論