"); //-->
代码:
#include <stdio.h>
#include <stdint.h>
// CRC-8 计算函数,使用多项式0x9B
uint8_t crc8_0x9b(uint8_t *data, size_t len) {
uint8_t crc = 0xFF; // 初始CRC值
while (len--) {
crc ^= *data++; // 将当前字节的数据与CRC寄存器进行异或
for (int i = 0; i < 8; i++) {
if (crc & 0x80) { // 如果最高位是1
crc = (crc << 1) ^ 0x9B; // 左移一位,并与多项式进行异或
} else {
crc = crc << 1; // 左移一位
}
}
}
return crc;
}
int main() {
uint8_t data[4] = {0,0,0x12,0X34};
//uint8_t *data_bytes = (uint8_t *)&data; // 将16位数据转换为字节数组
// 计算CRC,因为data是16位,但CRC是针对8位(字节)计算的,
// 这里我们假设只计算低8位(即0x34)的CRC,因为高位(0x12)对CRC的贡献取决于具体应用场景
// 如果你需要同时处理两个字节,你可能需要调整循环或处理逻辑
uint8_t crc = crc8_0x9b(data, 4); // 只计算低8位(即0x34)的CRC
printf("CRC-8 (0x9B) for 0x%02X is 0x%02X\n", data, crc);
// 注意:如果你的预期结果是0xEF,并且这与上面的代码不匹配,
// 那么可能需要调整初始值、处理顺序、多项式或考虑同时处理两个字节的数据。
// 但根据常见的CRC-8实现,上面的代码应该为0x34计算出一个合理的CRC值。
return 0;
}0x1234当作4各元素的数组 {0x00,0x00,0x12,0x024};
运行结果

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。