浮点数的IEEE745标准表示-CSDN博客https://blog.csdn.net/tian_tia/article/details/116376384
不清楚IEEE754表示的可以看看上面这条链接,很详细,这里我直接贴上写的代码了。
/******************* 单精度浮点数转化为十进制 ************************
传参:uint16_t buffer0,uint16_t buffer1
返回值: float
*/
static float HEXfloat_toDEXfloat(uint16_t buffer0,uint16_t buffer1)
{
bool symbol = false;//正负标志位
uint8_t bintemp[32];//缓存,存储二进制格式的单精度浮点数
uint8_t i,n;
uint16_t ints = 0;//整数部分
float dec = 0;//小数部分
for(i=0;i<32;i++)//将十六进制单精度浮点数按位保存到缓存
{
if(i<16)
{
bintemp[15-i]=(buffer0&(1<<i))==0?0:1;
}
else
{
bintemp[47-i]=(buffer1&(1<<(i-16)))==0?0:1;
}
}
if(bintemp[0]==0)//判断buffer[0]是否为0,确定符号
n = (buffer0>>7)-127;//计算二进制的幂数
else
n = ((buffer0>>7)&0xFF)-127;//去除符号位,计算二进制的幂数
for(i=0;i<n;i++)//累加省略首位1后的整数部分
{
ints += bintemp[9+i]*(1<<(n-i-1));
}
ints += 1<<n;//补加上省略掉的首位1
for(i=0;i<3;i++)//计算小数部分,这里i取3,即只保留精度到0.125的部分,需要要可以改为23-n,保留全部精度
{
dec += (float)bintemp[9+n+i]/(2*(i+1));
}
ints = (int)(((float)ints+dec)*100);//合并整数和小数部分得到结果,这里我为了方便,乘了100,传递的整形变量
return ints;
}