我正在开发一个桌面应用程序,该应用程序从服务器接收字节格式的帧。我让设备的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),我会看到一些差异:
imeiStr较短,并且在位置4上也不同于原始位置。
答案 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);