c语言四字节转浮点数_浮点数与标准C语言浮点数格式(IEEE标准)转换

在实现单片机与外围设备的通信时,经常需要传送一些浮点型数据,而数据传输过程中又无法直接传输浮点数据。

应用中通过C语言浮点数格式(IEEE-754标准)来进行数据转换。将待转换的的浮点数依照IEEE-754标准进行转换,利用转换后的数据进行数据传输。

如果通过普通的程序进行转换,其转换过程略显繁琐。考虑到C语言中浮点数本身就是采用IEEE格式来存储的,因此可直接利用其存储的二进制数值进行数据传输。共用体(union)可方便的实现这种功能。

1. C语言浮点数格式

在计算机中,浮点数的存储均采用4字节的IEEE-754格式。其中,位31:符号位S,位30-23:阶码E,位22-0:尾数M(22->0,从高位到低位)。所表示的浮点数值为(-1)s·(1+M·2-23)·2E-127。例如,浮点数5.0的IEEE表示为40a00000,S=0,E=129,M=221,浮点数1.2表示为:3f99999a。

2. 共用体union实现

union:使几个不同的变量共占用同一段内存的结构。

定义方式

typedef union

{

float floatData;

uint32 byteData;

}FLOAT_BYTE;

FLOAT_BYTE   testData;

定义的共用体testData中,包括两个变量,浮点型变量floatData(占用4字节空间),无符号整型变量byteData(占用4字节空间),这两个变量占用的4字节空间是同一段内存单元,因此写入的数据会相互覆盖。

使用时,将浮点型数据存储到floatData中,即可通过byteData来读取其IEEE格式数据;

将IEEE格式数据存储到byteData中,即可读取floatData读取浮点数值。

3. 注意事项

虽然这种方法已经在计算机上验证,但是不同的芯片其数据存储方式可能会有不同(虽然没有尝试),在使用之前一定要进行验证。以下为几个经过验证的转换

5.0  --> 0x40a00000

60   --> 0x42700000

1.2  --> 0x3f99999a

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值