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

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

[复制链接]

该用户从未签到

37

主题

80

回帖

451

积分

中级会员

积分
451
发表于 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


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

回复 送花

使用道具 举报

该用户从未签到

46

主题

3174

回帖

7173

积分

超级版主

积分
7173
发表于 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 送花

使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 181 天

    [LV.7]常住居民III

    9

    主题

    310

    回帖

    3859

    积分

    荣誉版主

    积分
    3859
    发表于 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

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    37

    主题

    80

    回帖

    451

    积分

    中级会员

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

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

    使用道具 举报

    该用户从未签到

    37

    主题

    80

    回帖

    451

    积分

    中级会员

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

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-6-14 18:31 , Processed in 0.071876 second(s), 47 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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