[英]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.