You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算指定参数的CRC8_SAE_J1850及获取带打印功能的实现代码

HITAG256 CRC8_SAE_J1850计算实现方案

实现思路

  • 明确CRC8参数:多项式0x1D(二进制11101),初始值0xFF,待计算数据为4字节:0x00、0x00、0x0C、0x05
  • 核心计算逻辑:
    1. 初始化CRC寄存器为0xFF
    2. 遍历每个输入字节:
      • 将当前字节与CRC寄存器值做异或运算
      • 对该字节的每一位(共8位)循环判断:若CRC寄存器最高位为1,则左移一位后与多项式0x1D异或;否则仅左移一位
    3. 所有字节处理完成后,CRC寄存器的最终值即为结果,预期输出为0xC2(二进制11000010)

带打印功能的C语言实现

#include <stdio.h>
#include <stdint.h>

// CRC8_SAE_J1850计算函数,参数:数据指针、数据长度、多项式、初始值
uint8_t crc8_sae_j1850(uint8_t *data, uint8_t length, uint8_t poly, uint8_t init) {
    uint8_t crc = init;
    for (uint8_t i = 0; i < length; i++) {
        crc ^= data[i];
        // 处理当前字节的8位
        for (uint8_t bit = 0; bit < 8; bit++) {
            if (crc & 0x80) { // 检查最高位是否为1
                crc = (crc << 1) ^ poly;
            } else {
                crc <<= 1;
            }
        }
    }
    return crc;
}

int main() {
    // 待计算的4字节数据:00 00 0C 05
    uint8_t input_data[] = {0x00, 0x00, 0x0C, 0x05};
    uint8_t data_length = sizeof(input_data) / sizeof(input_data[0]);
    // CRC参数:多项式0x1D,初始值0xFF
    uint8_t poly = 0x1D;
    uint8_t init = 0xFF;
    
    uint8_t result = crc8_sae_j1850(input_data, data_length, poly, init);
    
    printf("计算结果:0x%02X(二进制:%08b)\n", result, result);
    printf("预期结果:0xC2(二进制:11000010)\n");
    
    return 0;
}

运行说明

编译并运行程序后,会输出计算得到的CRC8值,以及预期结果,可直接对比验证。

内容的提问来源于stack exchange,提问作者vas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:15:05