我正在尝试使用以下代码将QByteArray
转换为int
:
int byteArrayToint(const QByteArray &ba, QDataStream::ByteOrder byteOrder)
{
int val = 0;
QDataStream stream(ba);
stream.setByteOrder(byteOrder);
stream >> val;
return val;
}
然后在主要功能中:
....
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(“你好”)而不是使用QByteArray,那么它会给出预期的结果:
"0x48"
"0x65"
"0x6c"
"0x6c"
"0x6f"
date = 1214606444
我找不到到目前为止的错误。我知道使用位移的方法运行良好,但我想理解为什么我没有得到与Qt类相同的结果。
感谢您的帮助。
答案 0 :(得分:2)
在这一行:
stream >> val;
将流中的sizeof(int)
个字节读入变量val。
鉴于sizeof(int)
为4,任何大小至少为4个字节的字节数组都可以使用某个int值(其余字节将被忽略)。