【问题标题】:QByteArray to Int conversionQByteArray 到 Int 的转换
【发布时间】: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 添加零后,它按预期工作。谢谢。

标签: c++ qt


【解决方案1】:

在这一行:

stream >> val;

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

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

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 2017-06-16
    • 2016-10-14
    • 2016-05-14
    • 2020-04-17
    • 2014-07-13
    • 2019-11-11
    • 2016-11-04
    • 2020-09-18
    相关资源
    最近更新 更多