你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

16进制的浮点数 如何换算为 10进制的浮点数?

[复制链接]
myfocus-2048857 提问时间:2017-2-10 11:01 /
见附图
单片机输出了 两个16进制的浮点数(分别为:3E 4E 82 E5和43 B9 46 29)。
MCU为STM32F030。

请教:
如何将这两个16进制的浮点数转换为10进制的浮点数 ?

谢谢!

附图
无标题.png

收藏 2 评论5 发布时间:2017-2-10 11:01

举报

5个回答
creep 回答时间:2017-2-10 14:21:22
浮点数在内存中是用4个字节的表示的,知道了这个之后借助联合体可以有下面的一个可行的方法:

  1. union UFloat
  2. {
  3. float f;          // 浮点数
  4. uint8_t  by4[4]; // 对应的16进制数据
  5. };

  6. float  a,b;

  7. float  c0 = -7.691887,d0 = 4.412552;

  8. union UFloat ua,ub,uc,ud;

  9. int main(void)
  10. {   
  11.     //数组buff中存的16进制数据即为浮点数c0,d0对应的16进制
  12.     uint8_t buff[] = {0xF0,0x23, 0xF6,0xC0,0xA0, 0x33,0x8D,0x40};
  13.     uint8_t t;
  14.     //将浮点数c0,d0对应的16进制分别赋值给联合体ua,ub
  15.     for(t = 0;t < 4;t++)
  16.     {
  17.       ua.by4[t] = buff[t];
  18.       ub.by4[t] = buff[t+4];
  19.     }
  20.     //取得联合体ua,ub中浮点数的值赋值给a,b
  21.     a = ua.f;
  22.     b = ub.f;
  23.     //将相应的浮点数赋值给联合体uc.f和ud.f
  24.     //便于查看浮点数c0,d0对应的16进制
  25.     uc.f = c0;
  26.     ud.f = d0;
  27.     //从调试结果可以看到a的值和c0的相等.b的值和d0的相等
  28. }   
复制代码

运行结果:
2017-02-10_141004.png

myfocus-2048857 回答时间:2017-2-10 15:30:26
creep 发表于 2017-2-10 14:21
浮点数在内存中是用4个字节的表示的,知道了这个之后借助联合体可以有下面的一个可行的方法:

学习了,非常感谢 !
埃斯提爱慕 回答时间:2017-2-11 18:27:21
提示: 作者被禁止或删除 内容自动屏蔽
wdliming-222461 回答时间:2020-2-3 17:35:59
谢谢分享
aiherong 回答时间:2020-2-10 03:21:27
很可惜!后起之秀的孩子们极少愿与16进制、二进制打交道,宁肯大费周张
其实对32位机如果一个数超出4个字节(int 型就是4X8=32位)就可能是long或float ,区别在于是否需要"补"运算
比如:0xFFFF = -1; 0xfffe =-2… 在我记忆中是符点数与十进制是应该有一算法可实现的
2020.02.10.03浮转十.png

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版