我有一个带有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数组转换为无符号长型?还是有办法直接从小端数组转换为无符号长整数?
提前感谢!
[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()));