c++ - Boost.Iostreams 与 iostream/streambuf 重载比特流 I/O

标签 c++ stl iostream boost-iostreams

对于我当前的任务,我需要能够读/写(主要是基于文件的)比特流。 虽然如果用标准 C/C++ 编码,这或多或少是一项微不足道的任务,但我喜欢 通过重载和使用更通用的方法重写代码 标准的 STL iostream 或类似的,所以我可以写类似的东西

writeHeader();
{
    ofstream outfile ("test.bin");
    outfile << true; // Write 1 bit
    outfile << false; // Write 1 bit
    outfile << (char)0x42; // Write 8 bits
}

但是我不确定该走哪条路:

  1. 使用 Boost.IOStream 或
  2. 直接从 streambuf 或 iostream 派生。

到目前为止,我从来不需要派生/提供我自己的流类,但我想改进我的 知识...

也许有人可以提供一些建议或提示,更喜欢哪种方式以及为什么!?

谢谢!

最佳答案

您最好的选择可能是使两者 成为新的流类和流缓冲区类。使用自定义流类重载输出运算符以将单个位放入自定义流缓冲区。

原因是 C++ 不支持比单个字节 (char) 更小的实体。即使是 bool 类型也不是一个位,因为它必须是可寻址的。

关于c++ - Boost.Iostreams 与 iostream/streambuf 重载比特流 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13582358/

相关文章:

c++ - ostream 链接,输出顺序

c++ - iostream 到 zlib 和 C++ 文件?

c++ - 加解密生成器项目

c++ - Libpcap - 接收与发送数据包

c++ - extern "C"默认参数是否有效?

c++ - 根据字符串大小对字符串 vector 进行排序

c++ - 使用 hash_map 时,在 STL 字符串上使用的最佳散列算法是什么?

c++ - msvcr100d.dll!_heap_alloc_base(unsigned int size=80) 第 55 行失败并抛出

c++ - 为什么需要 std::make_unique 来初始化成员 std::unique 数组,以及如何解决 C++11 问题?

c++ - 为什么 sleep() 会阻塞 std::ostream