找回密码
 立即注册
查看: 749|回复: 4

请问怎么将浮点数转换出来?

[复制链接]

46

主题

108

回帖

604

积分

高级会员

积分
604
发表于 2023-6-2 20:24:38 | 显示全部楼层 |阅读模式

有个触摸屏是16年买的,一直放着洒灰,今天突然想起来用,屏幕的输出数值是4字节浮点型的,但是单片机没用过浮点型的,不知道怎么转换,

单片机用的STC15W4K56S4

比如在触摸屏上输入1,单片机就收到0x3F 0x80 0x00 0x00,

输入2,单片机就收到0x40 0x00 0x00 0x00

输入3,单片机就收到0x40 0x40 0x00 0x00

输入99.99,单片机就收到0x42 0xC7 0xFA 0xE1


这种浮点数值看不懂,请教下怎么转换成正常的数值,谢谢谢谢

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:53
  • 最近打卡:2025-05-04 20:21:07

73

主题

5885

回帖

1万

积分

超级版主

积分
12091
发表于 2023-6-2 23:19:28 | 显示全部楼层
两种方法:
1、用联合。
union
{
        float         fx;
        uu        tmp[4];
}char_float;
将4个字节送到char_float.tmp[]里,则char_float.fx就是对应的浮点数。
2、强制转换。
顶一个数组 tmp[4],将4个字节送到tmp[]里,则 ((float *)&tmp)[0]就是浮点数。
回复 支持 0 反对 1

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-03-09 19:40:01

9

主题

328

回帖

4501

积分

荣誉版主

积分
4501
发表于 2023-6-2 23:23:48 | 显示全部楼层
这就是float在内存中存储的格式(IEEE-754),如下图

Screenshot 2023-06-02 231654.png Screenshot 2023-06-02 231636.png


下面是桌面端的实现方式,Keil C51是支持float的,这样应该可以正确运行
不过要注意一下大小端问题,可能需要赋值为0xE1FAC742这样的顺序,你自行测试一下
Screenshot 2023-06-02 231932.png

回复 支持 反对

使用道具 举报 送花

46

主题

108

回帖

604

积分

高级会员

积分
604
发表于 2023-6-3 04:42:49 | 显示全部楼层
kk*** 发表于 2023-6-2 23:23
这就是float在内存中存储的格式(IEEE-754),如下图

好的,十分感谢
回复 支持 反对

使用道具 举报 送花

46

主题

108

回帖

604

积分

高级会员

积分
604
发表于 2023-6-3 04:42:58 | 显示全部楼层
梁*** 发表于 2023-6-2 23:19
两种方法:
1、用联合。
union

好的,十分感谢
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-4 23:06 , Processed in 0.140671 second(s), 77 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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