找回密码
 立即注册
查看: 1481|回复: 15

关于printf打印unsigned char变量的疑问

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-01 21:04:13
已绑定手机

21

主题

487

回帖

1027

积分

金牌会员

积分
1027
发表于 2023-12-1 18:14:34 | 显示全部楼层 |阅读模式
  摘自STC串口例程里的  "输出unsigned char 类型,可以使用%bu、%bx",    请问使用printf打印无符号char类型的变量值有什么特定要求吗?我今天遇到一个奇怪的现象,调试程序时,为了方便观察变量,使用printf()输出到串口,但是数据总是和实际对不上,后来我特意测试了一下,例如设定变量 u8 AA=14,BB=15,CC=16, 如果使用printf("AA=%bu,BB=%bu,CC=%bu\r\n",AA,BB,CC);  输出的结果竟然时 AA=14,BB=0,CC=15,如果单独打印输出变量如:printf("AA=%bu",AA);printf("BB=%bu",BB);printf("CC=%bu",CC); 结果就又正常了,请问这是什么情况?

本帖被以下淘专辑推荐:

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2023-12-21 15:41:25 | 显示全部楼层
可能的一个情况,,BB这个变量在别的地方被改变了吧,,这得看看整个工程了。

但从这两种写的语法上应该没什么问题。。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-01 21:04:13
已绑定手机

21

主题

487

回帖

1027

积分

金牌会员

积分
1027
发表于 2023-12-22 15:12:36 | 显示全部楼层
_奶*** 发表于 2023-12-21 15:41
可能的一个情况,,BB这个变量在别的地方被改变了吧,,这得看看整个工程了。

但从这两种写的语法上应该没 ...

我检查过,没有修改变量值的代码,所以我现在都是分开打印,或者使用整型也不出现这种情况,char类型就不行,估计和printf预留的位数有关
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2023-12-22 15:15:02 | 显示全部楼层
lly*** 发表于 2023-12-22 15:12
我检查过,没有修改变量值的代码,所以我现在都是分开打印,或者使用整型也不出现这种情况,char类型就不 ...

问一下 你的编译的内存模式用的large模式还是small模式...
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-01 21:04:13
已绑定手机

21

主题

487

回帖

1027

积分

金牌会员

积分
1027
发表于 2023-12-22 15:30:08 | 显示全部楼层
_奶*** 发表于 2023-12-22 15:15
问一下 你的编译的内存模式用的large模式还是small模式...

XSmall
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2023-12-22 15:41:50 | 显示全部楼层

XSmall 是C251的东西么? 要么就是这种模式下 编译器的限制,换成large试一试?要么就是这个变量存到了寄存器上,加一个xdata试一试?
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2023-12-22 15:50:04 | 显示全部楼层
截图202312221547579105.jpg
这个是我keil编译时的设置
截图202312221548225149.jpg
这个是我代码写的,,printf那行直接从你那里复制过来的。
截图202312221549529725.jpg
运行结果
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-01 21:04:13
已绑定手机

21

主题

487

回帖

1027

积分

金牌会员

积分
1027
发表于 2023-12-22 15:59:26 | 显示全部楼层
嗯嗯,我也去试试

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-01 21:04:13
已绑定手机

21

主题

487

回帖

1027

积分

金牌会员

积分
1027
发表于 2023-12-22 16:00:50 | 显示全部楼层
_奶*** 发表于 2023-12-22 15:50
这个是我keil编译时的设置

这个是我代码写的,,printf那行直接从你那里复制过来的。

我现在用的是STC32G系列的,所以使用C521
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-01 21:04:13
已绑定手机

21

主题

487

回帖

1027

积分

金牌会员

积分
1027
发表于 2023-12-22 17:21:37 | 显示全部楼层
按照你说的改了设置,重新建了一个简单的工程,结果还是一样的,改成printf("aa=%u,bb=%u,cc=%u)没有问题。
简单代码.png
print结果.png

点评

我想到一种可能, 251 是 16位机, 基本单位是 int, 默认都是 自动扩展到 int , 数据前面加强制转换, 应该可行 ! u8 AA=14,BB=15,CC=16 printf("AA=%bu,BB=%bu,CC=%bu\r\n",(u8)AA,(u8)BB,(u8)CC);  详情 回复 发表于 2023-12-22 21:22
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:17 , Processed in 0.202054 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表