c++ - C++ 中的位缓冲区

标签 c++ fstream bit

我正在做一个作业,我需要将位写入缓冲区,一旦缓冲区填满 8 位,我就会刷新。 (霍夫曼压缩)

我在输入期间分配/保存中间阶段时遇到问题。所以我做了一些测试,比如

char buf = 0;

cout << (buf | (1 << 1));
buf = (buf | (1 << 1));
cout << buf;

但不明白为什么我不能保存中间阶段。其输出将是:

2"happy face"

代替

22

能教我如何保存中间阶段吗?

基本上,我需要一点一点地写入缓冲区,一旦缓冲区是一个字节,我就会将它刷新到我的输出文件。

最佳答案

原因有点棘手 - 它与您写到 cout 的表达式类型有关,而不是作为按位表达式的结果获得的值。

在第一种情况下,表达式是(buf | (1 << 1)) .根据 C++ 的规则,此表达式的类型为 int : OR 的左侧展开以匹配右侧。

在第二种情况下,表达式的类型是char , 因为操作已经完成,结果已经转换回 char .

这就是为什么第一个值被解释为数字,而第二个值被解释为 ASCII 字符代码 2,当在您的系统上打印时对应于 ☺。添加 Actor 应该可以解决这个问题。

关于c++ - C++ 中的位缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20002921/

相关文章:

c - 内存中的位存储顺序

c++ - Cocos2d-x 和处理触摸事件

C++:使用动态内存分配编写类似于 C realloc() 函数的函数(即更改其大小)

c++ - 使用 C++ 对文件中的行进行编号

c++ - 如何在C++中读取然后编辑文件txt

c - 有没有办法通过 union 访问各个位?

assembly - x86 汇编语言高位和低位

c++ - 具有 boost::shared_ptr 类型成员的 std::map 序列化失败

c++ - 跳过未使用的虚函数

c++ - 用 fstream 在最后一行写