如何从二进制文件中读取双精度并将其保存在向量中
How to read double from binary file and save it in a vector
我在读取二进制文件时遇到问题。
到目前为止我的代码:
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;
我还要指出,直接将变量复制到二进制文件并返回是不明智的。可能会出现诸如类型大小,字节序或(如果是文本)编码等问题,并破坏不同计算机上的程序。
相关文章:
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 如何在数组和向量 c++ 中存储和保存输入
- 将结构向量保存到文件中,并从C++文件中读取结构向量
- C++ 将地址保存为字符串的向量转换为新的向量
- 使用 for 循环是否比在 C++ 中将内容保存在向量中更快?
- 将所有正则表达式匹配项保存在向量上
- 如何在向量中保存位置以供以后插入?
- 向量迭代器不兼容的错误,用于保存另一个向量的迭代器的向量
- 将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?
- 为什么可以访问在 for 循环中创建的向量,这些向量被保存到向量向量中
- 如何诊断保存和加载位向量(std::vector)的奇怪行为<bool>?
- 如何创建一个function_list<>类来保存具有相同模板语法的 std::function<>s 向量?
- 如何保存枚举类型的向量的向量
- 为什么我的将向量保存到文件然后再次读出的方法不起作用?
- 我可以将某些对象的指针保存在向量中,而不是将指针调用内联函数
- 分类一个向量,该向量由该类中的成员字符串保存对象
- 如何从二进制文件中读取双精度并将其保存在向量中
- 如何在向量中保存不同的分布
- 可以使用 std::p air 保存三种数据类型的向量
- c++如何保存向量项和双精度