这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 无符号整数转十六进制字符串

共1条 1/1 1 跳转至

无符号整数转十六进制字符串

院士
2026-07-09 20:35:13     打赏

在嵌入式项目中,在显示打印的时候很多时候还是都要归整到字符串,然后,再调用统一的显示API函数来显示。因此,也就有了将uint32_t转换为十六进行字符串的需求。比如

# 输入 159145
# 输出字符串 "0x26DA9"

其实最简单的办法就是使用sprintf()函数来实现。比如:

dat = 159145;
sprintf(disp_buf, "%X", dat);

只需要一行就可以解决问题。不过,它也有一个劣势,需要调用string.h,并加载libc.a库。而后者将会显著增加flash的体积,即使你只使用了这一个API函数,它也是要加载整个libc.a。

是不是有点不爽?!其实,我们也可以自已编写一个格式化整数的API函数实现。说干就干!

const char hex_digits[] = "0123456789abcdef";
int uint2hex(char *buf, unsigned int value) {
    char tmp[8];
    int i = 0;

    if (value == 0) {
        buf[0] = '0';
        return 1;
    }

    while (value > 0) {
        tmp[i++] = hex_digits[value % 16];
        value /= 16;
    }

    // 反转
    for (int j = 0; j < i / 2; j++) {
        char t = tmp[j];
        tmp[j] = tmp[i - 1 - j];
        tmp[i - 1 - j] = t;
    }

    memcpy(buf, tmp, i);
    return i;
}

貌似也没有那么难啊!




关键词: 类型转换     十六进制     字符串    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]