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
相关产品推荐
相关产品推荐

