使用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/