float与unsigned int的转换

最近在项目中想把浮点数存储到stm32的flash中,但flash的形式是以字节的形式存储。曾经也专门查过float在内存中的存储形式,根据IEEE 754的标准,浮点数由符号位、指数位、小数位组成。

我们都知道float占32位4字节,那将float转化需要用对应的32位存储,那我们选择unsigned int来存储float的字节。代码如下:

float a=-1.23;
unsigned int b;
b=*((unsigned int*)&a);//如果是直接b=(unsigned int)a的话,嘿嘿 。
printf("%x",b);

最后得到的结果是bf9d70a4,掏出计算器,这是我们想要的(但还是能看到精度所带来的问题)。

这样我们就把float转换为16进制数,便可以存储到flash中了。

不过问题又来了,当我将flash中的数读出来后,怎么存到转换为float呢?再3天的挣扎后,我学到了使用联合体union来存储。即解决了float转u32,又解决了u32转float。union与struct的区别是什么,直接上代码。

typedef union
{
    float a;
    unsigned int b;
}Data;

int main(void) { 
    Data data;   
    data.a=-1.23;
    printf("%x",data.b);
    return 0;
}

输出结果还是bf9d70a4,所以正因为float和u32都是占32个位,对任意一项改变也就是对另一项的改变,原因就是他们都存在同一个地址。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值