16进制的浮点数 如何换算为 10进制的浮点数?
见附图单片机输出了 两个16进制的浮点数(分别为:3E 4E 82 E5和43 B9 46 29)。
MCU为STM32F030。
请教:
如何将这两个16进制的浮点数转换为10进制的浮点数 ?
谢谢!
附图
浮点数在内存中是用4个字节的表示的,知道了这个之后借助联合体可以有下面的一个可行的方法:
union UFloat
{
float f; // 浮点数
uint8_tby4; // 对应的16进制数据
};
floata,b;
floatc0 = -7.691887,d0 = 4.412552;
union UFloat ua,ub,uc,ud;
int main(void)
{
//数组buff中存的16进制数据即为浮点数c0,d0对应的16进制
uint8_t buff[] = {0xF0,0x23, 0xF6,0xC0,0xA0, 0x33,0x8D,0x40};
uint8_t t;
//将浮点数c0,d0对应的16进制分别赋值给联合体ua,ub
for(t = 0;t < 4;t++)
{
ua.by4 = buff;
ub.by4 = buff;
}
//取得联合体ua,ub中浮点数的值赋值给a,b
a = ua.f;
b = ub.f;
//将相应的浮点数赋值给联合体uc.f和ud.f
//便于查看浮点数c0,d0对应的16进制
uc.f = c0;
ud.f = d0;
//从调试结果可以看到a的值和c0的相等.b的值和d0的相等
}
运行结果:
creep 发表于 2017-2-10 14:21
浮点数在内存中是用4个字节的表示的,知道了这个之后借助联合体可以有下面的一个可行的方法:
学习了,非常感谢 ! 学习了。 谢谢分享 很可惜!后起之秀的孩子们极少愿与16进制、二进制打交道,宁肯大费周张
其实对32位机如果一个数超出4个字节(int 型就是4X8=32位)就可能是long或float ,区别在于是否需要"补"运算
比如:0xFFFF = -1; 0xfffe =-2… 在我记忆中是符点数与十进制是应该有一算法可实现的
页:
[1]