将 QByteArray 转换为 unsigned short:不符合预期

Convert QByteArray to unsigned short: not as expected

我有一个 QByteArray 这样的:

QByteArray idx0;

// idx0 is then assigned 4 bytes,
// idx0 content is shown on debugger as:

// idx0 "[=10=]0[=10=]0[=10=]1[=10=]0"  QByteArray
//          '[=10=]'    0       0x00    char
//          '[=10=]'    0       0x00    char
//                  1       0x01    char
//          '[=10=]'    0       0x00    char

我像这样将 QbyteArray 转换为 unsigned short

unsigned short ushortIdx0;
if ( idx0.size() >= sizeof(ushortIdx0) ) {
    ushortIdx0 = *reinterpret_cast<const unsigned short *>( idx0.data() );
}

调试器将 ushortIdx0 值显示为 0:

// Debugger shows:
//
// ushortIdx0   0   unsigned short

但是,当我通过this website0x 00 00 01 00的Little Endian值转换为UINT32 - Little Endian时,我得到:

UINT32 - Little Endian (DCBA):

Raw             UINT32
00 01 00 00     65536

为什么 that website 的结果与我通过代码得到的结果不同?我不明白。感谢您的帮助。

根据评论,您不能总是假设 unsigned short 是特定大小。如果您知道您需要一个具有一定位数的无符号整数,那么请使用 cstdint 中的适当类型 - 在这种情况下为 uint32_t

关于字节序问题,既然您正在使用 Qt 为什么不以平台不可知的方式使用 QDataStream 到 serialize/deserialize 数据。写一个无符号的 32 位整数使用...

quint32 data = ...;
QByteArray ba;
QDataStream ds(&ba, QIODevice::ReadWrite);
ds << data;

类似地读回数据。