我正在尝试使用以下代码从文件中读取二进制数据:
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
答案 0 :(得分:3)
istream_iterator
是operator >>
的化身;它使用该运算符从流中读取。这几乎不是您想要读取二进制数据的原因,因为>>
是格式化的输入函数。您可以通过在流上使用noskipws
这样的操纵器强制它来执行您想要的操作,但它仍然可以有效地使用错误的工具来完成工作。
如果您希望对流中的二进制数据进行基于迭代器的访问,那么最好使用istreambuf_iterator
(保证逐个字符地工作)。