我正在做一个作业,我需要将位写入缓冲区,一旦缓冲区填满 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/