码迷,mamicode.com
首页 > 其他好文 > 详细

IEEE754浮点数转换

时间:2020-09-17 21:59:12      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:pow   规则   eee   ffffff   hex   dbus   在线   公式   进制转换   

一、

处理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浮点数转换

标签:pow   规则   eee   ffffff   hex   dbus   在线   公式   进制转换   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!