Qt中double与float与16进制字符串之间的转换

前述

在一些需求中,我们需要读取一些二进制文件,比如java的class文件,图片文件等等。我们有时需要解析里面具体的内容。通过Qt的QFile类读取文件后,可以将其中的二进制读到一个QBytearray中,而我们可以通过QBytearray的toHex方法将其转换为16进制字符串。
而有些时候,这些数据会存储一些double和float类型的浮点数据的16进制形式,我们需要根据需求把16进制转换为double或float。
对于整数int形式,Qt中有明确的方法可以进行转换。这里我们用uint的类型,避免负数。

#include <QString>
int main(){
   
   
// do some things
	QString hex = "cafebabe";
	uint res = hex.toUInt(nullptr, 16);
	qDebug() << res;	// 3405691582
// do some things
}

但是,对于float和double类型的数据,QString没有对应的16进制转换方法。需要另辟蹊径。

需要知道

首先我们需要知道c++中double和float类型所占的空间。
double在内存中占8字节,float在内存中占4字节。
其次,我们需要知道一些东西:
int、uint占4字节
最后,我们需要知道QT中内置的类型:qulonglong,占8字节
对于qulonglong,在qt中定义如下:

typedef long long qint64;           /* 64 bit signed */
typedef unsigned long long quint64; /* 64 bit unsigned */
typedef qint64 qlonglong;
typedef quint64 qulonglong;

(见qglobal.h)
qulonglong就是unsigned long long

float和double转16进制

基本思路

在Qt中,QString存在一个arg方法,这个方法有n多种重载,它的作用类似字符串模板函数,并带有进制转换的功能,arg函数的所有重载都有4个参数。
如下:


QString 
arg(const QString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const
QString 
arg(qlonglong a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值