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:使⼏个不同的变量共占⽤同⼀段内存的结构。
定义⽅式
浮点型变量floattypedef 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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论