"); //-->
代码:
#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};
运行结果
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。