Qt小端序和大端序举例,字节的内存存储格式

小端序(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变量中。

猜你喜欢

转载自blog.csdn.net/m0_45463480/article/details/130775516