日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2字节十六进制浮点数 qt_Qt之8个字节转化为double小数

發(fā)布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2字节十六进制浮点数 qt_Qt之8个字节转化为double小数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先要理解double的存儲方式,具體可查找相關的博客

本文實現(xiàn)的是將8個字節(jié)(存儲為16進制的字符串)轉(zhuǎn)化為對應的double類型

double MainWindow::qByteArraytodouble(QString qstr)

{

QByteArray byte;

StringToHex(qstr,byte);

double result;

memcpy(&result, byte.data(), 8);

return result;

}其中StringToHex函數(shù)定義如下

/***********字符串轉(zhuǎn)16進制數(shù)***********/

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

{

//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范圍內(nèi)的會發(fā)送成0

}同樣的,也可以用類似的方法,將4個字節(jié)轉(zhuǎn)化為對應的float數(shù)據(jù)

float MainWindow::qByteArraytofloat(QString qstr)

{

QByteArray byte;

StringToHex(qstr,byte);

float result;

memcpy(&result, byte.data(), 4);

return result;

}調(diào)用實例如下:

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);

標簽:

總結(jié)

以上是生活随笔為你收集整理的2字节十六进制浮点数 qt_Qt之8个字节转化为double小数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。