单精度浮点数转化为十进制,符合IEEE754(C语言)自用

浮点数的IEEE745标准表示-CSDN博客icon-default.png?t=N7T8https://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;
}	

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值