繁体   English   中英

将 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 "\000\000\001\000"  QByteArray
//          '\0'    0       0x00    char
//          '\0'    0       0x00    char
//                  1       0x01    char
//          '\0'    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

但是,当我通过本网站0x 00 00 01 00的 Little Endian 值转换为UINT32 - Little Endian ,我得到:

UINT32 - Little Endian (DCBA):

Raw             UINT32
00 01 00 00     65536

为什么网站的结果与我通过代码获得的结果不同? 我不明白。 我很感激任何帮助。

根据评论,您不能总是假设unsigned short是特定大小。 如果您知道需要具有一定位数的无符号整数,则使用cstdint的适当类型——在本例中为uint32_t

关于字节序问题,既然您使用的是Qt为什么不使用QDataStream以与平台无关的方式序列化/反序列化数据。 使用...写一个无符号的 32 位整数

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

并类似地读回数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM