我正在开发一个桌面应用程序,它从服务器接收字节格式的帧。我有设备的 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),我会看到一些差异:
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/