首页 » 技术分享 » IEEE 754标准 32位浮点数(float)转十进制 C语言

IEEE 754标准 32位浮点数(float)转十进制 C语言

 

关于32位浮点数转整形的相关知识可以参考这篇博客:https://blog.csdn.net/u011575671/article/details/74518933

用Modbus读PLC的浮点数寄存器的时候读取的内容为IEEE 754标准的32位寄存器,需要转换一下,可以根据自己的需求转换,直接贴代码:

//============================================================
//函数名称 :Float32
//函数功能 :将32位的float转换为10进制正数(0~99999)舍弃小数,IEEE 754标准
//输入变量 :NumFloat32:待转换32位浮点数	
//返 回 值 :计算结果 无符号整形 u32 ,返回-1为负数或者超限;
//调试记录 :
//============================================================
unsigned int Float32(const unsigned int NumFloat32)
{
	
	unsigned char  sbit,ebits;
	unsigned int mbits,result;

	sbit = NumFloat32 >> 31;
	ebits =  ( NumFloat32 >> 23 ) & 0xff ;
	mbits =  NumFloat32 & 0x7fffff ; 

	if(sbit)    //若需要负数部分,sbit为1时,result*-1,去掉判断;
	{
		return -1 ;
	}
	ebits -= 127;    //得到阶码<0,即结果小于1,返回0;
	if(ebits < 0)
	{
		return 0;
	}
	result = (1 << ebits) +(mbits >> (23 - ebits));     
    /*若有小数位数精度要求,mbits的0~(23 - ebits)位可以适当保留处理;可以进行自定义处理
    result = (1 << ebits) +(mbits >> (23 - ebits)); 改为 result = (1 << (ebits + 10))* 1000 / 1024 + (mbits >> (13 - ebits)) * 1000 / 1024 ; 
    结果扩大了1000倍,result/1000为整数部分,result%1000为小数*/
	if(result > 99999)
	{
		return -1 ;
	}
	printf("result = %d\n",result);
	
	return result;	
}

 

转载自原文链接, 如需删除请联系管理员。

原文链接:IEEE 754标准 32位浮点数(float)转十进制 C语言,转载请注明来源!

0