void test()
{
    QFile f("..\\data\\NAVHistory2.txt");
    if (!f.open(QFile::ReadOnly))
    {
        return;
    }
    QByteArray data = f.readAll();
    int iLeft = data.indexOf('[');
    int iRight = data.lastIndexOf(']');

    QJsonDocument::fromRawData(data.data() + iLeft, iRight - iLeft + 1);// got error

}

我想剪切一部分QByteArray并将其发送到QJsonDocument。最简单的方法是使用QByteArray::mid并创建QByteArray的新副本。 QJsonDocument::fromJson(QByteArray)效果很好。

但是,它只需要删除一小部分数据。因此,创建新的QBytedata会降低性能。有一种更好的方法QJsonDocument::fromRawData(char*)。但是我得到一个错误:
QJsonDocument::fromRawData: data has to have 4 byte alignment
我在Qt文档中查找了this。它说data has to be aligned to a 4 byte boundary. Qt source

我的应用程序是x64项目,因此char*是8字节边界。我该如何度过?

最佳答案

我看到两个选择:

  • 就拿副本。快捷方便。
  • 如果您不需要data的其他功能,只需使用data.remove(0, iLeft)使JSON代码段从QByteArray的开头开始(该位置至少对齐4个字节)。
  • 关于c++ - QJsonDocument::fromRawData(const char * data,int size)数据必须与4字节边界对齐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59281917/

    10-09 06:33