大小端序与端序转换(二)
Qt之8个字节转化为double小数
首先要理解double的存储方式,具体可查找相关的博客
本文实现的是将8个字节(存储为16进制的字符串)转化为对应的double类型
double MainWindow::qByteArraytodouble(QString qstr)
{
QByteArray byte;
StringToHex(qstr,byte);
double result;
memcpy(&result, byte.data(), 8);
return result;
}
其中StringToHex函数定义如下:
/***********字符串转16进制数***********/
void MainWindow::StringToHex(QString str, QByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen = 0;
int len = str.length();
senddata.resize(len/2);
char lstr,hstr;
for(int i=0; i<len; )
{
//char lstr,
hstr=str[i].toLatin1();
if(hstr == ' ')
{
i++;
continue;
}
i++;
if(i >= len)
break;
lstr = str[i].toLatin1();
hexdata = ConvertHexChar(hstr);
lowhexdata = ConvertHexChar(lstr);
if((hexdata == 16) || (lowhexdata == 16))
break;
else
hexdata = hexdata*16+lowhexdata;
i++;
senddata[hexdatalen] = (char)hexdata;
hexdatalen++;
}
senddata.resize(hexdatalen);
}
char MainWindow::ConvertHexChar(char ch)
{
if((ch >= '0') && (ch <= '9'))
return ch-0x30;
else if((ch >= 'A') && (ch <= 'F'))
return ch-'A'+10;
else if((ch >= 'a') && (ch <= 'f'))
return ch-'a'+10;
else return ch-ch;//不在0-f范围内的会发送成0
}
同样的,也可以用类似的方法,将4个字节转化为对应的float数据
float MainWindow::qByteArraytofloat(QString qstr)
{
QByteArray byte;
StringToHex(qstr,byte);
float result;
memcpy(&result, byte.data(), 4);
return result;
}
调用实例如下:
QString longitude = list[4];//"d0e1219827610040"
double longitude_rad = qByteArraytodouble(longitude);//2.04744
double longitude_deg = 180 * longitude_rad /M_PI;
longitude = QString::number(longitude_deg,10,8) + " deg";
ui->label_longitude->setText(longitude);
QString altitude = list[5];//"55fc6a40"
float altitude_m = qByteArraytofloat(altitude);//3.67165
altitude = QString::number(altitude_m,10,8) + " deg";
ui->label_altitude->setText(altitude);
转:https://blog.csdn.net/zong596568821xp/article/details/79211463
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧