C++ C++;:不是从二进制文件中读取

C++ C++;:不是从二进制文件中读取,c++,binary,C++,Binary,我知道这类问题经常被问到,但无论我举什么样的例子,我似乎都无法得到预期的结果。我想从二进制文件中读取整数并将它们存储在向量中。我有下面的代码 std::ifstream infile; infile.open(fileName.c_str(), std::ios_base::binary | std::ios_base::in); infile.seekg(0, infile.end); long size = infile.tellg(); std::vector<int> i

我知道这类问题经常被问到,但无论我举什么样的例子,我似乎都无法得到预期的结果。我想从二进制文件中读取整数并将它们存储在向量中。我有下面的代码

std::ifstream infile;
infile.open(fileName.c_str(), std::ios_base::binary | std::ios_base::in);

infile.seekg(0, infile.end);
long size = infile.tellg();

std::vector<int> input(size/sizeof(int), 0);

// Option 1
infile.read(reinterpret_cast<char*>(&input[0]), size);

// Option 2
infile.read((char*)&input[0], size);

infile.close();
std::ifstream-infle;
open(fileName.c_str(),std::ios_base::binary | std::ios_base::in);
填充参见kg(0,填充结束);
长尺寸=infie.tellg();
标准::矢量输入(大小/大小(int),0);
//选择1
填充读取(重新解释铸件和输入[0]),大小;
//选择2
填充读取((字符*)和输入[0],大小);
infle.close();
我在读取时尝试了这两个选项,但在打印向量内容时,所有元素都为零。

//选项1
infle.read(重新解释和输入[0]),sizeof(int);

您需要传递要读取的数据块的大小,而不是整个文件的大小。如注释中所述,您还需要在确定大小后重置指向文件开头的指针

如果使用较新的C++(C++ 11),文件名转换为C字符串是不必要的。如果你有C++ 17,那么学习<代码> <代码>库是值得的。< /P>


如果你想读取许多整数,请将读取放入循环中。

你从未检查过文件是否打开或读取是否成功。在查找到结尾后,你处于EOF。在开始读取之前,请先查找开始。嘿,斯塔克。谢谢你的建议。它现在实际上正在读取数据,但数据完全是假的。可能你的co中存在错误顺便说一句,不要将二进制读入
std::vector
,除非您知道底层结构。IMHO,最好读入一个临时整数,然后将整数放入向量。