1. 程式人生 > >(C/C++) CRC8計算實現

(C/C++) CRC8計算實現

CRC計算通常會有分成 CRC8、 CRC16、 CRC12、 CRC32.

CRC8 = X^8 + X^2 + X + 1             0x07(0x107)

CRC8 = X^8 + X^5 + X^4 + 1            0x31(0x131)

CRC8 = X^8 + X^6 + X^4 + X^3 + X^2 + X    0x5E(0x15E)

Note : CRC提及的位寬(W, Width),這個位數是多項式的最高位,所以對於CRC8的W指的就是 X^8。

剛剛有提到說最高位一定是1,所以衍生一種寫法較做簡記去除最高位寫下多項式的16進位制數值。

除了這樣寫下方便之外,在寫程式時也有它的用途。

1 0x107 --> 0x07
2 0x131 --> 0x31
3 0x15E --> 0x5E

CRC8 程式碼

 1 uint8_t crc8_calculate(uint8_t data, uint8_t crc){
 2 
 3     int i = 0;
 4     uint8_t crc_poly = 0x07;
 5     crc ^= data;
 6 
 7     for(i = 0; i < 8; i++){
 8 
 9         if(crc & 0x80){
10             crc <<= 1
; 11 crc ^= crc_poly; 12 } 13 else 14 crc <<= 1; 15 } 16 return (crc & 0xFF); 17 }