c++ - Qt:从固定字节数到整数
问题描述
使用 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 文档。QByteArray的:
QByteArray 可用于存储原始字节(包括“\0”)和传统的 8 位“\0”结尾的字符串。
对于恢复,也可以使用位操作。
的内容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
推荐阅读
- azure-devops-server-2020 - Azure DevOps Server 2020 - 如何编辑经典发布管道的描述和标签?
- sql - 按同一字段分组和在哪里分组,出现空值
- ios - iOS - 处理事件:每当文本被剪辑时
- scala - Scala 在特征中交叉引用的文档源
- assembly - 如何在ARM中进行浮点计算?
- visual-studio-code - 如何使用 vscodevim 在 VS Code 中浏览文件树?
- r - 使用 dplyr 在长格式数据上计算因子水平和数值的唯一出现次数
- jmeter - 如何在 JMeter 的单个脚本中对多个字段执行验证
- bash - 即使命令失败,退出状态也会返回“0”
- c# - 从 Intranet 网页中提取链接