小端序(Little Endian)和大端序(Big Endian)是在计算机存储器或数据网络等硬件设施中常用的字节序格式。
在小端序中,最低有效字节(Least Significant Byte)存储在最低内存地址处,最高有效字节(Most Significant Byte)存储在最高内存地址处。例如,对于一个16位的整数0x1234,它在内存中的存储方式为0x34 0x12。
在大端序中,最高有效字节存储在最低内存地址处,最低有效字节存储在最高内存地址处。例如,对于一个16位的整数0x1234,在内存中的存储方式为0x12 0x34。
在Qt中,可以使用Qt::Endian枚举类型来指定字节序:
QDataStream stream;
stream.setByteOrder(QDataStream::LittleEndian); // 小端序
stream.setByteOrder(QDataStream::BigEndian); // 大端序
举例来说,在使用QDataStream进行数据序列化时,可以采用以下代码指定字节序:
QByteArray buffer;
QDataStream stream(&buffer, QIODevice::WriteOnly);
stream.setByteOrder(QDataStream::LittleEndian); // 或者使用QDataStream::BigEndian
stream << static_cast<quint16>(0x1234);
这段代码将一个16位的整数以小端序的方式写入到数据流中。
在使用QDataStream进行数据反序列化时,也需要指定字节序:
quint16 number;
QDataStream stream(buffer);
stream.setByteOrder(QDataStream::LittleEndian); // 或者使用QDataStream::BigEndian
stream >> number;
这段代码把一个数据流中的16位整数以小端序的方式读入到number
变量中。