我正在使用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);
}

10-07 12:30