Получить imei из QByteArray в шестнадцатеричном виде - PullRequest
0 голосов
/ 10 ноября 2018

Я разрабатываю настольное приложение, которое получает кадры в байтовом формате с сервера. У меня есть imei устройства, отправляющего эти кадры внутри полученных кадров.

Я пытался добавить к long long переменную с соответствующим сдвигом влево на каждый байт (56, 48, 40..., 0), но число длиннее 40 bits, поэтому оно не работает.

Я просто хочу, чтобы он поместил текстовое поле, чтобы было достаточно формата QString, но я совсем не уверен в C ++ и не понимаю, как его получить.

Например, этот imei: 352353222952355 будет получен в кадре, подобном следующему: [0x00, 0x01, 0x40, 0x76, 0xA0, 0xB0, 0x85, 0xA3], который у меня есть в моем QByteArray. Каждый раз, когда я пытаюсь напечатать эту переменную с помощью qDebug (), я получаю шестнадцатеричное представление ("\ x00 \ 0x ...."). То, что я хочу получить, это число, которое я поставил в первой строке этого абзаца.

Как преобразовать в десятичное представление в QString?

EDIT: Я хочу добавить информацию о тесте, который я запускаю, с помощью @ Peter

Вот что я получу, если напечатаю QByteArray:

qDebug() << imei;
"\x00\x01@v\x98[\xD7\xAF"

Если я передам этот imei (QByteArray) вашей функции, я получу: QString imeiStr; imeiStr = ConvertToQString (imei);

qDebug() << imeiStr;
"\u0000\u0001@v?[\u05EF"

Если я отлаживаю приложение и показываю обе переменные (imei и imeiStr), я вижу некоторые различия:

enter image description here

imeiStr короче, а также, с позиции 4, отличается от оригинала.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018
quint8 source[8] = {0x00, 0x01, 0x40, 0x76, 0xA0, 0xB0, 0x85, 0xA3};
QByteArray imei;
for(int i = 0; i < 8; ++i){
    imei.append(source[i]);
}

qlonglong val = 0;
for(int i = 0; i < 8; ++i){
    val *= 256;
    val += (quint8)imei.at(i);
}
qDebug() << QString::number(val);
0 голосов
/ 10 ноября 2018

Вы можете использовать строковые потоки:

#include <sstream>

QString ConvertToQString(const QByteArray& array)
{
    std::stringstream ss;
    for (int i = 0; i < array.size(); ++i)
        ss << array[i];

    return QString::fromStdString(ss.str());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...