繁体   English   中英

使用std :: istream_iterator从文件停止处预先读取二进制数据

[英]Using std::istream_iterator to read binary data from file stops prematuraly

我正在尝试使用以下代码从文件读取二进制数据:

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向量只有380个元素,即它在结尾之前停止读取。 end设置为nullptr(?),因此迭代器读取直到读取零字节? 第380个字节为109。这里的停止条件是什么? 以及如何确定它可以读取整个文件?

使用

fp.seekg (0, fp.end);
std::streamoff length = fp.tellg();
fp.seekg (1, fp.beg);

给出长度= 401

istream_iteratoroperator >>的化身。 它使用该运算符从流中读取。 几乎从来就不需要读取二进制数据,因为>>格式化的输入函数。 您可能可以通过在流上使用诸如noskipws操纵器来强迫它执行所需的操作,但是仍然可以有效地使用错误的工具来完成工作。

如果要基于迭代器访问流中的二进制数据,则最好使用istreambuf_iterator (保证逐个字符地工作)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM