c++ - 从数组中的文件中读取多个 float

标签 c++ qt deserialization qdatastream

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

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;
}

但是单独读取这些 float 效率不是很高,所以我想先一起读取4个 float (maxX, maxY, minX, minY),然后读取一个int,然后再读取所有其他 float (floatX和floatY的实例) ) 在一起。
我已经试过了:

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

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

但它给出了错误的结果。

那么,如何在一个缓冲区数组或 vector 中读取多个 float ?

更新:

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

最佳答案

来自文档:

"The QDataStream class provides serialization of binary data to a QIODevice."

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

如果您想加快速度,我的建议是不要使用QDataStream,而是使用常规标准fstream

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

关于c++ - 从数组中的文件中读取多个 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51513686/

相关文章:

c++ - 复制构造函数的参数选择

python - 如何在没有 os.kill() 的情况下终止进程 - OSGeo4W Python 2.5

c++ - C++ 代码中 3D 数组的输出

qt - QGraphicsView:如何使橡皮筋选择仅出现在鼠标左键上?

visual-studio - 在 Visual Studio 中使用 Qt 设计器?

java - 默认情况下,Jackson 反序列化器是如何工作的

c# - 反序列化具有未知值名称的 JSON 并在 C# 中获取所述名称

c# - 多态性 WCF 反序列化不起作用

c++ - 为什么我的自定义信号处理程序会让子进程在比较 pid 时得到 SIGTTIN

c++ - 为日期查找维度表填充加载文件的最佳方法是什么?