1. 程式人生 > 實用技巧 >IEEE754浮點數轉換

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; }