OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11194|回复: 11

用unsigned char定义了一个变量为什么用printf以%d输出后数字不对啊?

[复制链接]

82

主题

194

帖子

0

精华

高级会员

Rank: 4

积分
595
金钱
595
注册时间
2015-10-16
在线时间
72 小时
发表于 2017-11-10 12:03:25 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-11-9
在线时间
20 小时
发表于 2017-11-10 12:54:31 | 显示全部楼层
如果是串口输出,应该是波特率没配置对。
回复

使用道具 举报

82

主题

194

帖子

0

精华

高级会员

Rank: 4

积分
595
金钱
595
注册时间
2015-10-16
在线时间
72 小时
 楼主| 发表于 2017-11-10 13:27:47 | 显示全部楼层
gagaga 发表于 2017-11-10 12:54
如果是串口输出,应该是波特率没配置对。

波特率是对的,而且我如果将unsigned char 换成unsigned int输出结果是正确的
回复

使用道具 举报

1

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1459
金钱
1459
注册时间
2011-12-1
在线时间
110 小时
发表于 2017-11-10 13:44:39 | 显示全部楼层
最好不要加中文与字符一起写,容易出问题!最好全部是字符!
回复

使用道具 举报

11

主题

1041

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3696
金钱
3696
注册时间
2011-5-23
在线时间
2008 小时
发表于 2017-11-10 14:36:00 | 显示全部楼层
[mw_shl_code=c,false]printf("temp : %d\r\n", (int)temp);[/mw_shl_code]

%d的类型是int,不转的话,在非32位机上面容易出问题。
因为可变参数是通过栈传递的,类型不匹配,取值就会出错。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2017-11-10 18:07:52 | 显示全部楼层
一般无符号数以%u输出。

楼主可以修改试试看。
十六进制带我飞。
回复

使用道具 举报

2

主题

255

帖子

0

精华

高级会员

Rank: 4

积分
821
金钱
821
注册时间
2013-6-5
在线时间
141 小时
发表于 2017-11-11 00:40:03 | 显示全部楼层
我来告诉你,你数据类型没对,d是有符号整数,u是无符号整数,如果是51可以用bu来输出,其他要强制类型转换为一致的。
回复

使用道具 举报

5

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2017-6-21
在线时间
67 小时
发表于 2017-11-12 07:40:43 来自手机 | 显示全部楼层
51打印uchar用bu打印char用bd打印uint用bu,int用bd
回复

使用道具 举报

37

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2016-6-10
在线时间
191 小时
发表于 2017-11-14 21:30:55 | 显示全部楼层
c%输出啊
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2017-11-15 21:25:23 | 显示全部楼层
51的printf8位要使用 %bd就可以了,keil帮助里面有说明。

unsigned char temp;

printf("temp : %bd\r\n", temp);
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

4

主题

116

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3799
金钱
3799
注册时间
2017-11-15
在线时间
314 小时
发表于 2019-9-24 10:55:38 | 显示全部楼层
printf("为了:%d\r\n",(uint16_t)temp);可能是因为编译器对数据的格式限制,(uint16_t)自己手动加上,要强制格式转换一下。切记!!!
回复

使用道具 举报

11

主题

66

帖子

0

精华

高级会员

Rank: 4

积分
643
金钱
643
注册时间
2018-4-17
在线时间
152 小时
发表于 2020-10-23 15:51:40 | 显示全部楼层
8楼正解,牛P
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 06:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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