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

posted @   浅笑19  阅读(893)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示