[开发生态] printf的16进制输出问题

[复制链接]
5288|64
 楼主| suncat0504 发表于 2024-7-24 19:09 | 显示全部楼层 |阅读模式
最近做的一个程序中,想使用pringtf输出格式化的16进制数据,但结果不对。比如我想输出2位的16进制格式,不足的补位0,比如输出A为0A,在使用%02X时,结果不足两位的,输出只有1位,没有补0,是什么原因?
LEDyyds 发表于 2024-7-25 10:31 | 显示全部楼层
不应该啊,看起来没问题啊
trucyw 发表于 2024-7-25 19:05 | 显示全部楼层
看起来是没有问题
printf
Sunriver_Yao 发表于 2024-12-30 11:55 | 显示全部楼层
那就sprintf吧!
dspmana 发表于 2025-1-3 20:10 | 显示全部楼层
使用的格式字符串不正确。              
linfelix 发表于 2025-1-3 20:58 | 显示全部楼层
编译器设置可能会影响printf的行为。
sdlls 发表于 2025-1-3 22:31 | 显示全部楼层
编译器或环境设置有问题              
benjaminka 发表于 2025-1-4 01:33 | 显示全部楼层
对于 %02X,应该传递一个 无符号整数(如 unsigned int)。如果传递的是字符类型(如 char),可能会导致意想不到的行为,尤其是在不同平台上 char 可能有符号或无符号。
uptown 发表于 2025-1-4 07:21 | 显示全部楼层
缓冲区或输出重定向问题              
pmp 发表于 2025-1-5 09:39 | 显示全部楼层
通过串口或其他非标准输出方式查看结果,可能存在传输或显示的问题。
abotomson 发表于 2025-1-5 11:35 | 显示全部楼层
#include <stdio.h>

int main() {
    unsigned int value = 0xA; // 十六进制A
    printf("%02X\n", value);  // 输出0A

    value = 0xF; // 十六进制F
    printf("%02X\n", value);  // 输出0F

    value = 0x10; // 十六进制10
    printf("%02X\n", value);  // 输出10

    return 0;
}
kmzuaz 发表于 2025-1-5 12:31 | 显示全部楼层
需要检查运行时库是否完整和支持所有的printf功能。
burgessmaggie 发表于 2025-1-5 15:06 | 显示全部楼层
用的编译器支持标准的C语言格式说明符。大多数现代编译器如GCC、Clang和MSVC都支持。
wangdezhi 发表于 2025-1-5 16:43 | 显示全部楼层
%02X 是正确的格式说明符              
tabmone 发表于 2025-1-5 18:28 | 显示全部楼层
应该使用 %02X 或 %02x
geraldbetty 发表于 2025-1-5 20:54 | 显示全部楼层
参数类型不匹配              
sdCAD 发表于 2025-1-7 13:32 | 显示全部楼层
考虑编写一个简单的测试程序来单独测试 printf 的行为
xiaoyaodz 发表于 2025-1-7 14:29 | 显示全部楼层
printf 输出的值是正确的。
jtracy3 发表于 2025-1-7 14:53 | 显示全部楼层
%02X中的02表示最小宽度为2,不足两位时补0,X表示输出大写的16进制数。
wangdezhi 发表于 2025-1-7 15:49 | 显示全部楼层
#include <stdio.h>

int main() {
    unsigned int value = 0xA; // 十六进制A
    printf("Value: %u, Hex: %02X, Hex (lower): %02x\n", value, value, value);

    return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:大连伊飞特信息技术有限公司软件工程师
简介:本人于1993年毕业于大连理工大学。毕业后从事单片机开发工作5年,之后转入软件开发工作至今。

158

主题

4507

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部