我正在使用QDataStream序列化一些uint变量。值及其对应输出的一些示例:
quint32 i;
i = 99
[0,0,0,99]
i = 255
[0,0,0,255]
i = 256
[0,0,1,0]
i = 510
[0,0,1,254]
i = 512
[0,0,2,0]
i = 1024
[0,0,4,0]
转换如何完成?
这是我用来打印输出的内容。
QByteArray barr;
QDataStream stream(&barr,QIODevice::WriteOnly);
stream.setVersion(QDataStream::Qt_4_8);
quint32 i32 = 512;
stream << i32;
QList<int> valueList;
for(int i = 0 ; i < barr.count() ; ++i)
valueList.append(QChar(barr.at(i)).unicode());
qDebug() << valueList;
最佳答案
看起来像标准的big-endian表示形式。这就是将整数实际上分解为计算机内存中的字节的方式。例如:
510 = 0 * (1 << 24) + 0 * (1 << 16) + 1 * (1 << 8) + 254
如今,反向字节顺序为little-endian。您可以使用QDataStream .setByteOrder()进行选择。
以下是将32位整数拆分为字节的代码:
void putUint32BigEndian(quint32 x)
{
putByte(x >> 24);
putByte((x >> 16) & 0xff);
putByte((x >> 8) & 0xff);
putByte(x & 0xff);
}