IEEE754浮点数转换

一、

处理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;
}
原文地址:https://www.cnblogs.com/ike_li/p/13651932.html