如何将小端格式的QByteArray转换为无符号长整型
How to convert a QByteArray in little endian format to a unsigned long
我有一个 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 数组转换为无符号长整型数组?或者有没有办法直接从小端数组转换为无符号长整型数组?
提前感谢!
尝试memcpy
quint32 value = 0; //or qint32
memcpy(&value, baBigEndian.data(), sizeof(quint32));//or baBigEndian instead baBigEndian.data() if you use plain array instead QByteArray
此外,它可以通过reinterpret_cast
完成,但我不建议您使用reinterpret_cast
因为我在arm
处理器上遇到了一些问题(而在x86
它工作正常(。
toULong()
不起作用,因为它期望 QByteArray 包含 ASCII 格式的数字的字符串表示形式(例如"0xbb1c511e"
,即 10 个 ASCII 字节(,并且您的 QByteArray 包含文字二进制字节(例如0xbb1c511e
,即 4 个二进制字节(。
假设您的 QByteArray 包含大端格式的四个字节(就像示例代码中的步骤 2 之后所做的那样(,那么这将起作用:
unsigned long val = ntohl(*((const unsigned long *)ba.data()));
但请注意,sizeof(unsigned long)
不能保证在所有平台上都是 4 字节,因此您最好使用保证始终为 4 字节宽的固定宽度类型,例如
quint32 val = ntohl(*((const quint32 *)ba.data()));
相关文章:
- 如何将QByteArray转换为std::istream或std::ifstream?
- 将 QByteArray 转换为无符号短:不符合预期
- 如何将小端格式的QByteArray转换为无符号长整型
- 有没有办法"QByteArray"变量数据直接放入变量"int"而无需强制转换?
- 如何在不将其转换为 ASCII 字符的情况下显示 QByteArray 的十六进制值
- 将 QByteArray 从大端序转换为小端序
- 将 CRC uint 转换为 QByteArray QT - C++
- QByteArray 和 QString 转换的问题
- QByteArray 转换为十六进制失败
- 如何将QByteArray转换为QString?
- QT中的QByTearray转换
- QByTearray进行INT转换
- qbyTearray转换为char(不是char*或constchar*)
- 将 QByteArray 转换为“long”会为相同的输入输出不同的结果
- 将int转换为Qt中的QByteArray
- Qt:将QPixmap保存到std::vector<无符号字符>-或者将QByteArray转换为std::
- 将十六进制存储在 QBytearray 中,提取它并将其转换为十进制
- 如何将 QImage 转换为 QByteArray
- 问如何将QByteArray转换为struct
- 如何将 QByteArray 转换为带有分隔符"-"的 QString?