前述
在一些需求中,我们需要读取一些二进制文件,比如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(' '))

最低0.47元/天 解锁文章
1246

被折叠的 条评论
为什么被折叠?



