• 1987阅读
  • 2回复

[提问]如何将QByteArray转换为一个双精度double数 [复制链接]

上一主题 下一主题
离线tanyue.esec
 

只看楼主 倒序阅读 楼主  发表于: 2020-10-20
双精度浮点数是用8字节表示的,如何将8字节的QByteArray转换为double数值。

单精度的float数,我是用的以下方法转换的:
首先转换为QString,如3.1415的单精度字节,转换为16进制的字符串为str = 40490E56。
然后  int hex = str.toUInt(0, 16);
         float value = *(float*) hex;
得到了3.1415

这个方法同样用在double就不行了,而且我也没大明白,为什么通过toUInt()方法转以下就可以转成float了。
求助各位
离线272064949

只看该作者 1楼 发表于: 2020-10-21
有可能uint是4字节的,double是8字节的,放不下了, 你把str.toUint(0, 16),改成str.toUlonglong(0,16)试试
1条评分金钱+10
tanyue.esec 金钱 +10 - 2020-10-21
离线tanyue.esec

只看该作者 2楼 发表于: 2020-10-21
回 272064949 的帖子
272064949:有可能uint是4字节的,double是8字节的,放不下了, 你把str.toUint(0, 16),改成str.toUlonglong(0,16)试试
 (2020-10-21 09:10) 

确实如此,之前我也试过用   str.toULongLong(0, 16)

但是接收的返回值用的long,可能long的长度也不够,改成qlonglong去接收就可以了

qlonglong hex = str.toULongLong(0, 16);
double dl = *(double*) &hex;
快速回复
限100 字节
 
上一个 下一个