【发布时间】:2020-04-25 07:55:57
【问题描述】:
使用 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
有什么想法吗?
【问题讨论】:
-
您知道
randomValue包含十进制数字的ASCII 字符中的随机数吗?这就是QString::number()返回的内容。显然,对于 [0, 65535] 的范围,这将占用最多 5 个字节。如果要将 [0, 65535] 存储在两个字节中,则转换为字符串(文本)是一个不好的选择。short(或std::uint16_t)(将其存储为二进制整数)就足够了,不是吗?然后您可以读取short的两个字节并将它们存储到QByteArray中。 (或者,我完全误解了你的意图吗?) -
你完全正确。事实上,我的问题可以归结为两点: 1-如何在 QByteArray 中转换一个 std::uint16_t ,它恰好占据两个字节?和 2- 如何恢复 QByteArray 并重新获得short?
-
感谢您的努力 Scheff。我看到了 p-a-o-l-o 的答案,我正在尝试重现它。
标签: c++ qt qt5 byte qbytearray