在嵌入式项目中,在显示打印的时候很多时候还是都要归整到字符串,然后,再调用统一的显示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;
}貌似也没有那么难啊!
我要赚赏金
