首页 > 其他 > 详细

IEEE754浮点数转换

时间:2020-09-11 16:12:27      阅读:59      评论:0      收藏:0      [点我收藏+]

一、

处理Modbus协议的数据时,碰到IEEE754浮点数的转换,根据规则自己写出转换代码,方便以后使用。

1.在线转换网址:http://lostphp.com/hexconvert/ 

二、

转换浮点数32位。

void MainWindow::on_pushButton_clicked()
{
   //int source_data=0x41C7C474;//24.970924377441406
   //int source_data=0x81C7C474;
   //int source_data=0x3938A523;//0.0001760912564350292

   int data[4]={0x39,0x38,0xA5,0x23};
   int source_data=(int32_t)(data[0]<<24)+(int32_t)(data[1]<<16)+(int32_t)(data[2]<<8)+(int32_t)data[3];
   
    HexToFloat32_IEEE754(source_data);
}
#include <math.h>
float MainWindow::HexToFloat32_IEEE754(int source_data)
{

    /*
    1位符号位(SIGN)
    8位指数位(EXPONENT)
    23位尾数位(MANTISSA)

    其中,32位二进制数的排位为:[31][30][29]...[2][1][0]

    16进制转换为10进制的公式如下:

    SGL = (-1)^SIGN * 1.MANTISSA * 2^(EXPONENT-127)*/

    int sign=source_data>>31;
    int exponent=(source_data&0x7FFFFFFF)>>23;
    float mantissa=(source_data&0x7FFFFF)/std::pow(2,23);
    //float m=mantissa/std::pow(2,23);

    float dest=std::pow(-1,sign)*std::pow(2,exponent-127)*(1+mantissa);

    qDebug()<<"dest:"<<dest;
    return  dest;
}

 

IEEE754浮点数转换

原文:https://www.cnblogs.com/ike_li/p/13651932.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!