/*
* crc通用演算法 *
* version 1.0 *
* by yinpei *
* wuhan university *
* 2023年11月18日 *
*/#define crc_num_n //定義每種crc的校驗碼位元數
/*crc_num_32 == 32
crc_num_24 == 24
crc_num_16 == 16
crc_num_12 == 12
crc_num_8 == 8
crc_num_4 == 4
*/#define limit_mask_n //定義每種crc校驗碼的最大值
/*limit_mask_32 == 0xffffffff
limit_mask_24 == 0xffffff
limit_mask_16 == 0xffff
limit_mask_12 == 0xfff
limit_mask_8 == 0xff
limit_mask_4 == 0xf
*/#define msb_mask_n //用於檢測crc校驗碼左移一位後是否會溢位(所佔位元數超出crc_num_n)
/*msb_mask_32 == 0x80000000
msb_mask_24 == 0x800000
msb_mask_16 == 0x8000
msb_mask_12 == 0x800
msb_mask_8 == 0x80
msb_mask_4 == 0x8
*/#define r_n //根據n次生成多項式得到的1的對應的餘數多項式對應crc(0相應的餘數為0)
/*g_24(d)=d24+d23+d6+d5+d+1 : r_24 == 1000 0000 0000 0000 0110 0011 == 0x800063
g_16(d)=d16+d12+d5+1 : r_16 == 1000000100001 == 0x1021
g_12(d)=d12+d11+d3+d2+d+1 : r_12 == 100000001111 == 0x80f
g_8(d) =d8+d7+d4+d3+d+1 : r_8 == 10011011 == 0x9b
g_4(d) =d4+d3+d2+1 : r_4 == 1101 == 0xd
*///n表示生成多項式的最高端數,常見如32、24、16、12、8、4
unsigned int cal_crcn(unsigned char *ptr, unsigned char len) /* 余式crc 乘以2 再求crc */
else crc*=2;
if((*ptr&i)!=0) crc^=r_n; /* 再加上本位的crc */
}ptr++;
}return(crc);
}
驗證程式:
main()
;int res_crc;
res_crc=cal_crc16(test,8);
printf("res_crc=%x/n",res_crc);
}
CRC校驗和CRC各種演算法
crc校驗和crc各種演算法 1 簡介 crc即 迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收...
CRC演算法原理
演算法原理 假設資料傳輸過程中需要傳送15位的二進位制資訊g 101001110100001,這串二進位製碼可表示為代數多項式g x x 14 x 12 x 9 x 8 x 7 x 5 1,其中g中第k位的值,對應g x 中x k的係數。將g x 乘以x m,既將g後加m個0,然後除以m階多項式h ...
CRC解碼演算法
利用crc演算法計算誤位元速率和誤位元率,研究此演算法的效能曲線。crc.h pragma once include includeclass crc16 crc.cpp include crc16.h 多項式除法 int crc16 polynomial division int data in,...