其他分享
首页 > 其他分享> > QT笔记:QT 十六进制经纬度数据转IEEE-754浮点数据

QT笔记:QT 十六进制经纬度数据转IEEE-754浮点数据

作者:互联网

已知GPS数据:
经纬度格式:ddd.ddddd°(度),小数部分5位,报文中用16进制单精度float表示:

经度119.32132  用单精度float表示 42 EE A4 84
纬度39.46712   用单精度float表示 42 1D DE 55

原理不想展开,网上已搜一大堆,重点都在代码里:

QString Widget::claculate_Data(QByteArray array)
{
    bool ok;
    int sign = 1;
    //QByteArray array("425AE78F");  输入QByteArray = 42 5A E7 8F;
    array = QByteArray::number(array.toLongLong(&ok,16),2);  //将十六进制数据转换为二进制
    if(array.length()==32) {
        if(array.at(0)=='1')  sign =-1;                       // 如果第0位为1 ,则表示该数为负数;
        array.remove(0,1);                                    // 移除标志位
    }
    QByteArray fraction =array.right(23);   //获取小数部分;
    double mantissa = 0;
    for(int i=0;i<fraction.length();i++)     // 迭代数组,以小数形式计算分数
        if(fraction.at(i)=='1')     mantissa += 1.0/(pow(2,i+1));
    int exponent = array.left(array.length()-23).toLongLong(&ok,2)-127;     //计算指数位;

    calcu_Data = QString::number( sign*pow(2,exponent)*(mantissa+1.0),'f', 5 );
    qDebug() << "number= "<< QString::number( sign*pow(2,exponent)*(mantissa+1.0),'f', 5 );

    // 输出单精度浮点数据 number = 54.72613
    return calcu_Data;

}

转自:https://codess.cc/archives/370.html

标签:十六进制,QByteArray,QT,单精度,754,float,42,array
来源: https://www.cnblogs.com/qianxiaoPro/p/15673615.html