从十六进制的QByteArray获取imei

时间:2018-11-10 17:03:31

标签: c++ qt

我正在开发一个桌面应用程序,该应用程序从服务器接收字节格式的帧。我让设备的imei在收到的帧中发送这些帧。

我尝试将long long变量添加到每个字节(56, 48, 40..., 0)的相应左移位置,但是数字长于40 bits,所以它不起作用。

我只希望将它放在文本框中,以QString格式就足够了,但是我对C ++一点都不自信,我不知道如何获得它。

例如,将在352353222952355中包含以下这样的帧:[0x00, 0x01, 0x40, 0x76, 0xA0, 0xB0, 0x85, 0xA3]中接收此imei:QByteArray。每次我尝试使用qDebug()打印该变量时,都会得到十六进制表示形式(“ \ x00 \ 0x ....”)。我想要得到的是我在本段第一行中输入的数字。

如何转换为QString中的十进制表示形式?

编辑: 我想添加一些与我正在@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 :(得分:1)

您可以使用字符串流:

#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());
}

答案 1 :(得分:1)

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);