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

C语言如何将uint8_t十六进制数组元素如0x20转换为十进制整数20

C语言实现传感器特殊十六进制值转十进制的方案

你遇到的是传感器传输**8421 BCD(二进制编码十进制)**值的典型场景:每字节的高4位对应十进制数的十位,低4位对应个位,直接按位拆分计算即可完成转换。

基础实现代码

单字节转换函数

#include <stdint.h>

// 输入BCD编码的uint8_t值,返回对应的十进制整数
uint8_t bcd_to_dec(uint8_t bcd_value) {
    // 取高4位作为十位,乘10后加低4位的个位值
    return ((bcd_value >> 4) * 10) + (bcd_value & 0x0F);
}

数组批量转换示例

针对你给出的数组,批量转换的实现如下:

uint8_t mArray[3] = {0x20, 0x40, 0x48};
uint8_t dec_result[3];

for (int i = 0; i < 3; i++) {
    dec_result[i] = bcd_to_dec(mArray[i]);
}

转换后dec_result的结果为[20, 40, 48],完全符合需求。

带校验的安全实现(可选)

BCD码的每一位合法范围为09,若传感器传输过程中出现数据错误可能会产生0xA0xF的非法值,可以加合法性校验避免异常结果:

// 转换成功返回0,出现非法BCD值返回-1,转换结果存在out参数中
int8_t bcd_to_dec_safe(uint8_t bcd_value, uint8_t *out) {
    uint8_t ten_bit = bcd_value >> 4;
    uint8_t single_bit = bcd_value & 0x0F;
    if (ten_bit > 9 || single_bit > 9) {
        return -1;
    }
    *out = ten_bit * 10 + single_bit;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:09:03