CRC 通用演算法

2021-09-30 06:59:04 字數 1642 閱讀 3224

/*

*   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,...