c++ - 从 QByteArray 以十六进制获取 imei

标签 c++ qt

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

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

我只是想把它放在一个文本框上,所以 QString 格式就足够了,但我对 C++ 一点信心都没有,我不知道如何获得它。

例如,此 imei:352353222952355 将在这样的帧中接收:[0x00, 0x01, 0x40, 0x76, 0xA0, 0xB0, 0x85, 0xA3]在我的 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 开始,与原始版本不同。

最佳答案

您可以使用字符串流:

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

关于c++ - 从 QByteArray 以十六进制获取 imei,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53241306/

相关文章:

qt - 在 QMessageBox 中添加详细文本会禁用关闭 (X) 按钮

Qt:在数字字符串上使用 QSortFilterProxyModel 并获取错误的列文本时排序错误

c++ - 是否可以在 QGridLayout 中设置小部件之间的最小空间?

c++ - Lua使用C++向用户数据添加实例字段

c++ - 交换堆栈上的两个值

c++ - SFML 将 txt 文件中的图像加载到 vector 中只加载最后一张图像

javascript - 从 C++ Node.js 插件调用现有的 JavaScript 函数 - 从另一个线程

c++ - 当 QListView 选择因键盘事件而改变时发出信号?

c++ - 使用 toLatin1() 将 QString 转换为 QByteArray 会出现链接器错误

qt - 将元素动态添加到 QML 中的 SplitView