通过不同的耐力获得结果

时间:2018-12-31 18:11:29

标签: c++ qt

根据我以十六进制形式打印整数值的方式,我会得到具有不同字节序的结果

以下代码:

#include <QCoreApplication>
#include <QDebug>

template<class T>
QByteArray numToHex( T number )  // converts any number to hex format
{
     return QByteArray( (const char*)&number, sizeof(T) ).toHex();
}


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    quint64 hash64 = 18144624926692707313;
    qDebug() << "<< hex << hash64: " << hex << hash64;
    qDebug() << "numToHex(hash64):" << numToHex(hash64);

    return a.exec();
}

//this is the result: 
<< hex << hash64:  fbcea83c8a378bf1
numToHex(hash64):  "f18b378a3ca8cefb"

两个结果的固有性不同,为什么? 无论如何我都没有设置耐力,所以它们应该相同!

1 个答案:

答案 0 :(得分:0)

区别在于,在一种情况下,您将转到一个外部库,并为其提供一个64位整数(一个特定字节)的地址,并要求它根据该地址处的数据构造一个特定的类。然后,您要求该类将其内容输出为“十六进制”(实际上是字符串)。两种技术是否产生相同的结果将取决于第一个字节(您传递给numToHex的地址)实际上是qint64的最高有效字节还是最低字节...换句话说,您的结果取决于平台的字节序。