c++ - 用于二进制输出的 ostream_iterator

标签 c++ file-io iterator fstream binaryfiles

我希望能够使用 ostream_iterator 流式传输到二进制文件。但是 ostream_iterator使用 FormattedOuputFunction所以它会写 ASCII,而不是二进制:

std::ostream_iterator is a single-pass OutputIterator that writes successive objects of type T into the std::basic_ostream object for which it was constructed, using operator<<

除了编写自己的迭代器之外,还有其他方法可以使用迭代器来编写二进制文件吗?

我正在尝试做的一个简化示例,但是 copy语句将 ASCII 写入我的二进制文件:

ofstream foo("foo.txt", ios_base::binary);
vector<int> bar = {13, 42};

copy(bar.cbegin(), bar.cend(), ostream_iterator<decltype(bar)::value_type>(foo));

最佳答案

ostreambuf_iterator ostream_iterator 更合适.它的重量更轻,并且不进行格式化。它采用字符类型的模板参数,因此与大多数流兼容的唯一选择是 std::ostream_iterator< char > .

一定要以二进制模式打开流。顺便说一句,标准流缓冲区永远不会以二进制模式打开。

关于c++ - 用于二进制输出的 ostream_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32050780/

相关文章:

c++ - 如何在 C++ 中将 UTF-8 编码的字符串写入 Windows 中的文件

c++ - Qt/C++ 中对 class::slot 的 undefined reference

c++ - 从 .txt 文件获取文本到 vector<string> 的最佳方式是什么? C++

c++ - Libunwind PC 值不适用于 addr2line

C++ 运算符重载返回

python - 可迭代列表列表的迭代器

Java使用JFrame在csv文件中添加字段

java - 为什么这个文件无法删除?

C++:当我添加看似无关的代码行时,段错误消失了

java - 返回列表的迭代器