我有一个例子:
string str = "01100111 011011 011 0110011011 0111101 "
没有数据类型可以保存位。
首先,我动态分配三个字节;
BYTE* store = new BYTE[3];
其次,放入二进制代码<- 我不会编码。
第三,如果大于指定大小,则增加3个字节。
如何编码?
最佳答案
您有几个选择:
1) 使用std::vector<bool>
这可能是最像 C++ 的实现方式。 std::vector
专门用于 bool
s,它将每个 bool 值存储为一个位。它还会为您分配内存,因此您不必担心在有更多位时调整 vector 的大小。
有一个缺点是必须通过引用类才能直接访问位,并使用带 std::vector<bool>
的按位运算符。有点尴尬。
2) 移位运算符
C++ 也有运算符 <<
, >>
, <<=
, 和 >>=
可用于移动位。 <<
运算符将所有位向左移动,并且 >>
将它们向右移动。 <<=
和 >>=
是<<
和 >>
, 比如 +=
是+
.
这是一个例子:
unsigned char bits = 0b10010010 // uses binary literal syntax
bits <<= 1 // each bit in the variable is shifted left by one, making
// the bits be `00100100`. Note that the overflow is ignored.
bits >>= 2 // bits is now `00001001`
您可以将它们与 AND 和 OR 运算符(|
和 &
)结合使用来操作位。
此外,虽然这并不能完全解决您的问题,但您还可以使用 std::bitset
来表示位。不过,您仍然必须使用位移运算符。
关于c++ - 如何存储霍夫曼变换后的二进制代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49859204/