当前位置:   article > 正文

IEEE 754标准 32位浮点数(float)转十进制 C语言_ieee754标准浮点数转化为10进制代码

ieee754标准浮点数转化为10进制代码

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

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

  1. //============================================================
  2. //函数名称 :Float32
  3. //函数功能 :将32位的float转换为10进制正数(0~99999)舍弃小数,IEEE 754标准
  4. //输入变量 :NumFloat32:待转换32位浮点数
  5. //返 回 值 :计算结果 无符号整形 u32 ,返回-1为负数或者超限;
  6. //调试记录 :
  7. //============================================================
  8. unsigned int Float32(const unsigned int NumFloat32)
  9. {
  10. unsigned char sbit,ebits;
  11. unsigned int mbits,result;
  12. sbit = NumFloat32 >> 31;
  13. ebits = ( NumFloat32 >> 23 ) & 0xff ;
  14. mbits = NumFloat32 & 0x7fffff ;
  15. if(sbit) //若需要负数部分,sbit为1时,result*-1,去掉判断;
  16. {
  17. return -1 ;
  18. }
  19. ebits -= 127; //得到阶码<0,即结果小于1,返回0;
  20. if(ebits < 0)
  21. {
  22. return 0;
  23. }
  24. result = (1 << ebits) +(mbits >> (23 - ebits));
  25. /*若有小数位数精度要求,mbits的0~(23 - ebits)位可以适当保留处理;可以进行自定义处理
  26. result = (1 << ebits) +(mbits >> (23 - ebits)); 改为 result = (1 << (ebits + 10))* 1000 / 1024 + (mbits >> (13 - ebits)) * 1000 / 1024 ;
  27. 结果扩大了1000倍,result/1000为整数部分,result%1000为小数*/
  28. if(result > 99999)
  29. {
  30. return -1 ;
  31. }
  32. printf("result = %d\n",result);
  33. return result;
  34. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/258426
推荐阅读
相关标签
  

闽ICP备14008679号