【发布时间】: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 添加零后,它按预期工作。谢谢。