赞
踩
关于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;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。