QByteArray到Int转换

时间:2017-11-29 13:29:32

标签: c++ qt

我正在尝试使用以下代码将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类相同的结果。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

在这一行:

stream >> val;

将流中的sizeof(int)个字节读入变量val。

鉴于sizeof(int)为4,任何大小至少为4个字节的字节数组都可以使用某个int值(其余字节将被忽略)。