gpt4 book ai didi

c++ - 将 QByteArray 转换为无符号短 : not as expected

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:24 31 4
gpt4 key购买 nike

我有一个像这样的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 Endianthis website ,我得到:

UINT32 - Little Endian (DCBA):Raw             UINT3200 01 00 00     65536

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

最佳答案

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

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

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

类似地读回数据。

关于c++ - 将 QByteArray 转换为无符号短 : not as expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52126402/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com