我想从我已经写过的文件中读取多个浮点值:
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/