从数组中的文件读取多个浮点值



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

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());

但它给出了错误的结果。

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

UPD:

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

来自文档:

"QDataStream类将二进制数据序列化为QIODevice。">

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

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

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

相关内容

  • 没有找到相关文章

最新更新