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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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)