QByteArray 到 Int 的转换
Posted
技术标签:
【中文标题】QByteArray 到 Int 的转换【英文标题】:QByteArray to Int conversion 【发布时间】:2017-11-29 13:29:31 【问题描述】:我正在尝试使用以下代码将QByteArray
转换为int
:
int byteArrayToint(const QByteArray &ba, QDataStream::ByteOrder byteOrder)
int val = 0;
QDataStream stream(ba);
stream.setByteOrder(byteOrder);
stream >> val;
return val;
然后在main函数中:
....
QByteArray ba;
ba[0]=0x20;
ba[1]=0x17;
for(int i(0); i < ba.size(); i++)
qInfo() << QString("0x%1").arg((int)ba.at(i), 2, 16);
qInfo() << "date =" << byteArrayToint(ba, QDataStream::BigEndian);
...
输出是:
"0x20"
"0x17"
date = 0
但是如果我使用 QByteArray("Hello") 而不是以前的,它会给出预期的结果:
"0x48"
"0x65"
"0x6c"
"0x6c"
"0x6f"
date = 1214606444
到目前为止,我找不到错误在哪里。我知道使用位移的方法效果很好,但我想了解为什么我在 Qt 类中没有得到相同的结果。
感谢您的帮助。
【问题讨论】:
阅读后检查流status()
,我猜你会得到“阅读结束”状态。
我猜你使用的 int 是 4 个字节,而你只在 QByteArray 中放了 2 个字节!?
@Mat 你是对的。我没有注意这一点。在我根据 Endianess 添加零后,它按预期工作。谢谢。
【参考方案1】:
在这一行:
stream >> val;
您正在将流中的 sizeof(int)
字节读入变量 val。
鉴于 sizeof(int)
为 4,任何大小至少为 4 个字节的字节数组都可以生成一些 int 值(其余字节将被忽略)。
【讨论】:
以上是关于QByteArray 到 Int 的转换的主要内容,如果未能解决你的问题,请参考以下文章
从 QByteArray 以 bigendian 格式获取浮点数组的有效方法
QByteArray::number(int) 只有两个字节长