【发布时间】:2019-02-07 03:10:58
【问题描述】:
我有一个这样的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 值通过 this website 转换为 UINT32 - Little Endian 时,我得到:
为什么that website 的结果与我通过代码得到的不同?我不明白。感谢您的帮助。
【问题讨论】:
-
是什么让你确定
sizeof(unsigned short)是4? -
@G.M.让我检查一下...
-
@user3405291
*reinterpret_cast<const unsigned short *>( idx0.data() )是未定义的行为。 -
@G.M.哇!我仔细检查了:
sizeof(unsigned short): 2,因此我的假设完全错误。 -
除此之外,您永远不应该假设您的机器具有一定的字节顺序!使用
qFromLittleEndian在任何机器上获得一致的结果。
标签: c++ qt qbytearray