霍夫曼编码

时间:2009-04-05 14:09:41

标签: c++ compression huffman-code

我正在尝试实现压缩的霍夫曼算法,这需要将可变长度的位写入文件。在C ++中是否有任何方法可以将具有1位粒度的可变长度数据写入文件?

5 个答案:

答案 0 :(得分:9)

不,您可以写入文件的最小数据量是一个字节。

您可以使用bitset来简化操作位,然后使用ofstream写入文件。如果您不想使用bitset,可以在保存数据之前使用bitwise operators来操作数据。

答案 1 :(得分:3)

您可以访问和保存的最小位数是8 = 1个字节。您可以使用位运算符^&来访问字节中的位。 |

您可以使用:

将第n位设置为1
my_byte = my_byte | (1 << n);

其中n为0到7。

您可以使用:

将第n位设置为0
my_byte = my_byte & ((~1) << n);

您可以使用以下方式切换第n位:

my_byte = my_byte ^ (1 << n);

更多详情here

答案 2 :(得分:2)

klew的回答可能就是你想要的那个,但只是为了添加Bill所说的内容,Boost库有一个dynamic_bitset 我发现在类似情况下有用。

答案 3 :(得分:2)

你需要的所有信息都在这里:
How do you set, clear, and toggle a single bit?

但是你可以放入文件的最小对象是一个字节 我会使用dynamic_bitset,每次大小超过8时,将底部8位提取到一个字符并将其写入文件,然后将剩余的位向下移动8位(重复)。

答案 4 :(得分:1)

没有。你将不得不打包字节。因此,您需要在文件中使用一个标头来指定文件中有多少元素,因为您可能会使用未使用的尾随位。