打印
[开发工具]

【新定义MCU开发板测评】printf整数问题

[复制链接]
445|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51xlf|  楼主 | 2022-12-3 23:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在上一个测试DS1302的时候,使用printf测试输出的时间,
用printf("%02d:%02d:%02d",时,分,秒);
总是输出奇怪的数据。之前使用51单片机没有重映射这个函数。
但是在32位单片机上正常。
为了正确的输出时间,把时间用的取余转换为字符,按照字符发送实现的。

百思不得其解,想找到这个问题,看看怎么解决才行。百度了一下,原因是这个原因。
参考了https://blog.csdn.net/u012121390/article/details/124183533
51 单片机 通过 printf 打印格式化数据的时候,不能使用 %d 之类的占位符,转而使用以下占位符:


待打印数据的大小格式化的符号备注
占位符 8位bd/bubd:有符号8位数据 bu:无符号8位数据
占位符 16位hd/huhd:有符号16位数据 hu:无符号16位数据
占位符 32位ld/luld:有符号32位数据 lu:无符号32位数据

参考代码
unsigned char a = 128;
         char         b = -15 ;
         unsigned short c = 256;
         short d = -25;
         unsigned int         e = 65535;
         int f = -32765;

        printf("a=%bu b=%bd c=%hu d=%hd e=%hu f=%hd \r\n",a,b,c,d,e,f);
        printf("\r\n size(a)=%bu,size(c)=%bu,size(e)=%bu \r\n"  ,sizeof(a),sizeof(c),sizeof(e));

有搜索了一下其他的资料。Mark一下。

使用特权

评论回复
沙发
海滨消消| | 2022-12-4 12:54 | 只看该作者
最后问题解决了吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

534

主题

9584

帖子

23

粉丝