1

我想从我已经写过的文件中读取多个浮点值:

QDataStream &operator<<(QDataStream &out, const SomeClass &obj)
{
    out << obj.maxX << obj.maxY << obj.minX << obj.minY;

    out << (int) obj.points.size();

    for(int c = 0; c < obj.points.size(); ++c){
        out << obj.points.at(c).floatX << obj.points.at(c).floatY;
    }

    return out;
}

我可以使用这个来读取这个文件:

QDataStream &operator>>(QDataStream &in, SomeClass &obj)
{
    in >> obj.maxX >> obj.maxY >> obj.minX >> obj.minY;

    int pointsSize = 0;
    in >> pointsSize;

    for(int c = 0; c < pointsSize; ++c){

        float x = 0, y = 0;

        in >> x >> y;

        obj.points.push_back(Point(x, y));
    }
    return in;
}

但是单独读取这些浮点数并不是那么有效,所以我想一起读取前 4 个浮点数(maxX,maxY,minX,minY),然后读取一个 int,然后一起读取所有其他浮点数(floatX 和 floatY 的实例)。
我已经尝试过了:

 QDataStream in(&file);
 QByteArray ba;
 in.readRawData(ba.data(), 4*sizeof(float));

 float array[4];
 memcpy(&array, ba.constData(), ba.size());

但它给出了错误的结果。

那么,如何在一个缓冲区数组或向量中读取多个浮点数?

升级版:

我也已经看到 getline() 了,但是我如何char *从二进制文件中迭代并从中获取浮点数呢?

4

1 回答 1

1

来自文档:

“QDataStream 类为QIODevice 提供二进制数据的序列化。”

如果你使用getRawData()方法,你会得到二进制数据。这就是为什么在将它们解释为其他东西时会得到错误结果的原因。

如果你想加快速度,我的建议是不要使用QDataStreamfstream而是使用常规标准。

为避免多次读取,请使用getline()读取整行,然后遍历其中存储的数字。

于 2018-07-25T08:45:33.940 回答