?? crc.c
字號:
//CRC校驗算法
unsigned char S[130]; //原始數據為128字節,CRC校驗2字節
unsigned int CRC ( ) //CRC校驗算法(共130字節)
{
unsigned int i,j,m,n,p,q,c=0x1021;
m=S[0]*256+S[1]; //首先取兩個字節,拼成16位整數,作為基數
for (i=1;i<=64;i++) { //其余128字節分64批處理,每批2字節
n=S[2*i]*256+S[2*i+1]; //取兩個字節,拼成16位整數
for (j=0;j<16;j++) { //每批計算16次,每次處理1比特
p = m & 0x8000; //保留基數的最高位
q = n & 0x8000; //保留當前整數的最高位
m <<= 1 ; n <<= 1 ;//兩者均左移一位
if (q) m++ ; //當前整數的最高位拼入基數的最低位
if (p) m ^= c ; //如果基數移出的最高位為1,則“減去”0x1021
}
}
return m; //返回校驗結果
}
main ( )
{
int i;
unsigned int c;
for (i=0;i<128;i++) S[i]=i;//設置128字節原始數據
S[128]=S[129]=0; //將最后兩個字節設置為零
c = CRC ( ) ; //進行CRC校驗
S[128]=c/256;S[129]=c%256;//將校驗結果裝入最后兩個字節
c = CRC ( ) ; //再進行CRC校驗,結果應該為零
S[4] ^= 0x20; //引入一個差錯
c = CRC ( ) ; //再進行CRC校驗,結果不為零,發現差錯
S[6] ^= 0xff; //再引入8個差錯
c = CRC ( ) ; //再進行CRC校驗,結果不為零,發現差錯
while (1) ; //在這一行設置斷點,中止程序運行,以便觀察程序運行的結果
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -