c++ - Qt:从固定数量的字节到整数

标签 c++ qt qt5 byte qbytearray

使用Qt5.4,我构建了函数generateRandomIDOver2Bytes。它生成一个随机数,并将其放入正好占据两个字节的变量。

QByteArray generateRandomIDOver2Bytes() {
    QString randomValue = QString::number(qrand() % 65535);
    QByteArray x;
    x.setRawData(randomValue.toLocal8Bit().constData(), 2);
    return x;
}

我的问题是还原这样生成的值,以便再次获得一个整数。
以下最小示例实际上不起作用:
QByteArray tmp = generateRandomIDOver2Bytes(); //for example, the value 27458 
int value = tmp.toUInt(); 
qDebug() << value; //it prints always 9

任何的想法?

最佳答案

16位整数可以通过位操作拆分为单个字节。

这样,可以将其存储到QByteArray中。

来自Qt doc。的QByteArray:

QByteArray can be used to store both raw bytes (including '\0's) and traditional 8-bit '\0'-terminated strings.



为了进行恢复,也可以使用位操作。
QByteArray的内容不一定会变成可打印的字符,但是在这种情况下可能(或不应该)是可打印的字符。
testQByteArrayWithUShort.cc:

#include <QtCore>

int main()
{
  quint16 r = 65534;//qrand() % 65535;
  qDebug() << "r:" << r;
  // storing r in QByteArray (little endian)
  QByteArray qBytes(2, 0); // reserve space for two bytes explicitly
  qBytes[0] = (uchar)r;
  qBytes[1] = (uchar)(r >> 8);
  qDebug() << "qBytes:" << qBytes;
  // recovering r
  quint16 rr = qBytes[0] | qBytes[1] << 8;
  qDebug() << "rr:" << rr;
}

输出:

r: 65534
qBytes: "\xFE\xFF"
rr: 65534

关于c++ - Qt:从固定数量的字节到整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59634696/

相关文章:

c++ - waitpid() 给出不正确的退出代码

c++ - 智能指针可以隐式用作指针吗?

c++ - 可以在从 Thread 类继承的对象上使用 "delete this;"吗?

c++ - 如何在 std::unordered_map 中就地构造某个类的对象?

c++ - QStandardItemModel appendRow 在调用构造函数后不起作用

c++ - 如何捕捉 QSystemTrayIcon 的 MouseHover 事件?

c++ - SFML loadFromFile 不起作用,奇怪的错误

windows - 在 Windows 中从命令行编译 Qt 应用程序

qt - QWidgets 移动时会发出信号吗?

c++ - 如何在 QListWidget 中缩放自定义小部件?