#include <stdio.h>
#include <stdint.h>
uint8_t crc8(uint8_t *data, size_t len) {
uint8_t crc = 0x00; // 初始值
const uint8_t polynomial = 0x07; // 生成多项式 x^8 + x^2 + x^1 + 1
for (size_t i = 0; i < len; i++) {
crc ^= data[i];
for (int j = 0; j < 8; j++) {
if (crc & 0x80) {
crc = (crc << 1) ^ polynomial;
} else {
crc <<= 1;
}
}
}
return crc & 0xFF; // 最终异或值为0x00
}
int main() {
uint8_t data[] = {0x01, 0x02, 0x03, 0x04};
uint8_t crc = crc8(data, sizeof(data));
printf("CRC8: %02X\n", crc);
return 0;
}
|