【发布时间】:2020-04-01 00:56:45
【问题描述】:
我有一个 QByteArray,它有 4 个小端格式的值
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 数组转换为无符号长整数?或者有没有办法直接从小端数组转换为无符号长?
提前致谢!
【问题讨论】:
-
您希望这段代码在所有 CPU(包括大端和小端)上运行吗?
-
我通过串行连接获取字节数组的字节,所以我不确定它是否重要(可能所有 CPU 只是为了安全)
-
这很重要,因为例如PowerPC CPU 将希望以不同的顺序查看这些字节,例如英特尔 CPU。也就是说,
ntohl()函数(如下面的回答所示)将在所有情况下正确处理该问题。
标签: c++ qt endianness qbytearray ulong