新闻  |   论坛  |   博客  |   在线研讨会
CRC8校验
chen3bing | 2024-09-02 15:16:55    阅读:21   发布文章

代码:

#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};

运行结果

14.png

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

参与讨论
登录后参与讨论
1
最近文章
方波振荡电路
2024-09-14 14:59:39
6V3A电路
2024-09-14 14:18:10
MOS管点灯仿真
2024-09-12 15:43:13
推荐文章
最近访客