OpenEdv-开源电子网

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

我用串口助手向单片机发送一个数字,假如我发送的是3,单片机接收到的是3的ASCII值55,假如我要用三这个数字,我如何将ASCII值转换为对应的数呢?如果是一个多位数又该怎么转换呢?

[复制链接]
j

3

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2015-5-8
在线时间
83 小时
发表于 2015-11-24 13:16:02 | 显示全部楼层 |阅读模式
5金钱
我用串口助手向单片机发送一个数字,假如我发送的是3,单片机接收到的是3的ASCII值55,假如我要用这个数字,我如何将ASCII值转换为对应的数呢?如果是一个多位数又该怎么转换呢?

最佳答案

查看完整内容[请看2#楼]

1选择Hex发送就代表你要发送的内容是纯数字,由程序完成String到Int再到Byte的转化。所以你应该保证每个你要发送的数都是两位的,如果是7就应该写07,因为程序会每两位每两位地读。如果你选择了Hex发送,而输入的又是字符,比如你写了ab,那么就会被程序读为16进制的AB。这就是不同的概念了,无论你选择什么方式显示都不能得到原来的ab了。 2选择ASCII发送就代表你要发送的是字符串,这时候程序就会一位一位地读,比如你写了1234 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2015-11-24 13:16:03 | 显示全部楼层
1选择Hex发送就代表你要发送的内容是纯数字,由程序完成String到Int再到Byte的转化。所以你应该保证每个你要发送的数都是两位的,如果是7就应该写07,因为程序会每两位每两位地读。如果你选择了Hex发送,而输入的又是字符,比如你写了ab,那么就会被程序读为16进制的AB。这就是不同的概念了,无论你选择什么方式显示都不能得到原来的ab了。

2选择ASCII发送就代表你要发送的是字符串,这时候程序就会一位一位地读,比如你写了1234,在字节流中传递的就是123对应的ASCII码,31,32,33,34(十六进制的)。比较而言,在Hex发送模式下,写了1234,会被发送的就是12,34,如果是01020304那就是01,02,03,04。这个时候,你写ab就会发送相应的ASCII码61,62,其他字符同理。

发送字符数的话,接收端直接减去'0'就好了,如果你想发送一串数字,例如3654,你可以发送"3654"这个字符串,然后接收端接收后调用C库里面的atoi这个函数可以直接将字符串转为整数3654,很多这样的C库函数很方便,你可以自己百度下
我的博客:http://blog.csdn.net/itdo_just
回复

使用道具 举报

j

3

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2015-5-8
在线时间
83 小时
 楼主| 发表于 2015-11-24 13:17:11 | 显示全部楼层
说错了,3的ASCII值是51
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8024
金钱
8024
注册时间
2014-8-13
在线时间
1595 小时
发表于 2015-11-24 13:28:40 | 显示全部楼层
你发送的是'3',那么单片机接收到的就是'3', 你发送的是3,那么单片机接收到的就是3.
理解了上面那句话,这个问题不难解决。

如果不想关心那么多,直接将接收到的字节-48,即51-48=3。
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13114
金钱
13114
注册时间
2012-11-26
在线时间
3812 小时
发表于 2015-11-24 13:46:26 | 显示全部楼层
2楼  3楼  说的都很对
学无止境
回复

使用道具 举报

3

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
373
金钱
373
注册时间
2015-3-7
在线时间
43 小时
发表于 2015-11-24 14:01:11 | 显示全部楼层
串口发送的数据,如果不是hex发送的。那么发送的是字符。单片机可以把字符处理下,减去0x30,就可以转换了。 具体的3楼有答复了~
为人莫作千年计,三十河东四十西,莫欺少年穷。
回复

使用道具 举报

j

3

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2015-5-8
在线时间
83 小时
 楼主| 发表于 2015-11-25 20:43:57 | 显示全部楼层
谢谢大家的帮助,用三楼的方法成功解决了
回复

使用道具 举报

10

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2016-4-16
在线时间
13 小时
发表于 2016-8-16 22:55:53 | 显示全部楼层
大哥我也是遇到相同的问题 啊,比如说我要串口中输入3.3,然后在stm32单片机中也是受到十进制数的3.3,那么具体的在串口接收函数应该怎么写啊,教教我啊
回复

使用道具 举报

10

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2016-4-16
在线时间
13 小时
发表于 2016-8-16 22:56:56 | 显示全部楼层
229382777@qq.co 发表于 2015-11-24 13:16
1选择Hex发送就代表你要发送的内容是纯数字,由程序完成String到Int再到Byte的转化。所以你应该保证每个你 ...

大哥我也是遇到相同的问题 啊,比如说我要串口中输入3.3,然后在stm32单片机中也是受到十进制数的3.3,那么具体的在串口接收函数应该怎么写啊,教教我啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 02:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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