赞
踩
前几天进行对一个模块的研究,发现他串口传输过来的是16进制数,而我们需要浮点数值,显然需要一定的转换方式,一开始我还以为是需要特殊的计算方法,后来这才接触到了IEEE这个浮点数的存储方法
之前我的老师也没接触过这个,但是这是一个存储标准,以后用处应该会很多
EEE 754 标准是IEEE二进位浮点数算术标准(IEEE Standard for Floating-Point Arithmetic)的标准编号[1] ,等同于国际标准ISO/IEC/IEEE 60559[2] 。该标准由美国电气电子工程师学会(IEEE)计算机学会旗下的微处理器标准委员会(Microprocessor Standards Committee, MSC)发布。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的「浮点数运算子」;它也指明了四种数值修约规则和五种例外状况(包括例外发生的时机与处理方式)
废话不多说,下面给上C语言中的IEEE转浮点数的方法,理论上其他语言也可以用:
因为其实在计算机中,浮点数就是按照IEEE的16进制存储在内存中的,所以转换很简单
#include <stdio.h>
#include <String.h>
#define uint8 unsigned int
typedef union
{
float ul_Temp;
uint8 uc_Buf[4];
.
}un_DtformConver;
un_DtformConver DtformConver;
uint8 i;
int il_Temp32;
float f_Temp;
char uartbuf[30];
int main(){
//long int temp = b[0]*0x10*0x10+b[1]*0x10*0x10+b[2]*0x10*0x10+b[3]*0x10*0x10;
//il_Temp32 = 0x4247FAE4; //实际十进制值是220
memset((uint8 *)&DtformConver.uc_Buf[0],0,4);
for(i=0;i<4;i++){
DtformConver.uc_Buf[i] = (uint8)(il_Temp32>>(i*8));
}
f_Temp = DtformConver.ul_Temp;
printf("%.2f",f_Temp);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。