получать результаты с разным порядком байтов - PullRequest
0 голосов
/ 31 декабря 2018

В зависимости от того, как я распечатываю целочисленное значение в шестнадцатеричной форме, я получаю результаты с разным порядком байтов

следующий код:

#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 голосов
/ 31 декабря 2018

Разница в том, что в одном случае вы обращаетесь к внешней библиотеке и присваиваете ей адрес (один конкретный байт) 64-разрядного целого числа и просите его создать определенный класс из данных по этому адресу.Затем вы просите этот класс вывести его содержимое в виде "hex" (фактически, в виде строки).То, приведут ли эти два метода к одному и тому же результату, будет зависеть от того, является ли этот первый байт (адрес которого вы передаете numToHex) на самом деле самым старшим байтом из qint64 или наименее ... другими словами,Ваши результаты зависят от порядкового номера вашей платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...