(C/C++) CRC8計算實現
阿新 • • 發佈:2018-12-12
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 }