我正在尝试使用以下代码从文件中读取二进制数据:
std::ifstream fp;
fp.open("C:\\my_binary_data.dat", std::ios::binary);
std::istream_iterator<byte> start(fp), end;
std::vector<byte> tof(start, end);
fp.close();
文件有 401 个字节,但 tof vector 只有 380 个元素长,即它在结束前停止读取。 end
设置为 nullptr(?),因此迭代器读取直到读取零字节?第380字节是109,这里的停止条件是什么?我如何确定它读取了整个文件?
使用
fp.seekg (0, fp.end);
std::streamoff length = fp.tellg();
fp.seekg (1, fp.beg);
给出长度=401
最佳答案
istream_iterator
是operator>>
的化身;它使用该运算符从流中读取。这几乎不是您读取二进制数据所需要的,因为>>
是一个格式化 输入函数。您可能可以通过在流上使用诸如 noskipws
之类的操纵器来强制它执行您想要的操作,但它仍然会有效地使用错误的工具来完成工作。
如果您想要对流中的二进制数据进行基于迭代器的访问,您最好使用 istreambuf_iterator
(保证逐个字符地工作)。
关于c++ - 使用 std::istream_iterator 从文件中读取二进制数据过早停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37588569/