标签: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; }
标签:pow 规则 eee ffffff hex dbus 在线 公式 进制转换
原文地址:https://www.cnblogs.com/ike_li/p/13651932.html