如何将小字节序格式的QByteArray转换为无符号长型

问题描述 投票:0回答:1

我有一个带有4个小字节序格式值的QByteArray

QByteArray ba;
ba.append(0xbb);
ba.append(0x1c);
ba.append(0x51);
ba.append(0x1e);

将ba转换为大端字节,我执行以下操作:

baBigEndian[0] = ba[3];
baBigEndian[1] = ba[2];
baBigEndian[2] = ba[1];
baBigEndian[3] = ba[0];

将大端数组转换为无符号长整数,我尝试了以下操作:

baBigEndian.toULong(&ok,10);

小字节序字节数组已正确转换为大字节序,但.toULong返回0代替508632251。

如何将baBigEndian数组转换为无符号长型?还是有办法直接从小端数组转换为无符号长整数?

提前感谢!

c++ qt endianness qbytearray ulong
1个回答
0
投票

[toULong()将不起作用,因为它希望QByteArray包含以ASCII格式表示的数字的字符串表示形式,而您的QByteArray而是包含直接的二进制数据。

假设您的QByteArray包含大字节序格式的四个字节(就像您在示例代码中的步骤2之后所做的那样,那么这将起作用:

unsigned long val = ntohl(*((const unsigned long *)ba.data()));

但是请注意,sizeof(unsigned long)不能保证始终为4个字节,所以最好使用保证始终为4个字节的类型,而不是[]。

quint32 val = ntohl(*((const quint32 *)ba.data()));
© www.soinside.com 2019 - 2024. All rights reserved.