如何从二进制文件中读取双精度并将其保存在向量中

How to read double from binary file and save it in a vector

本文关键字:保存 向量 存在 双精度 二进制文件 读取      更新时间:2023-10-16

我在读取二进制文件时遇到问题。

到目前为止我的代码:

ifstream file("ns.bin", ios::in | ios::binary | ios::ate);
file.seekg(0, std::ios::end); 
size = file.tellg();  
file.seekg(0, std::ios::beg); 
buffer = new char[size];
file.read(buffer, size);
file.close();
double* double_values = (double*)buffer;//reinterpret as doubles

我的问题是:如何将双精度从double_values获取到这种类型的向量中:

vector<double> buffer2;

或者,如果不可能:如何从double_values获得双精度数?

希望sb可以帮助我谢谢!

只需将其复制到向量中:

vector<double> buffer2(double_values, double_values + (size / sizeof(double)));

解释:

这使用 std::vector 的迭代器构造函数(重载 5),它需要一个开始迭代器和一个结束迭代器。指针是迭代器,要获得结束迭代器,您需要知道数组中有多少元素。

事实证明,你知道数组有多少字节,所以把总大小除以一个双精度元素的大小,就会得到数组的总长度。

然后,通过添加开始迭代器的大小来查找结束迭代器变得微不足道。

首先是问题。这里完全回答了:如何从 C 样式数组初始化 std::vector?

const int size = 64;
char* chars = new char[64];
double* double_values = (double*)chars;
const int size_of_doubles = (sizeof(char)*size)/sizeof(double);
std::cout<<"Doubles: "<<size_of_doubles<<'n';
std::vector<double> buffer2(double_values, double_values+size_of_doubles );
std::cout<<buffer2.size();
delete chars;

我还要指出,直接将变量复制到二进制文件并返回是不明智的。可能会出现诸如类型大小,字节序或(如果是文本)编码等问题,并破坏不同计算机上的程序。