我正在尝试实现压缩的霍夫曼算法,这需要将可变长度的位写入文件。在C ++中是否有任何方法可以将具有1位粒度的可变长度数据写入文件?
答案 0 :(得分:9)
不,您可以写入文件的最小数据量是一个字节。
您可以使用bitset来简化操作位,然后使用ofstream写入文件。如果您不想使用bitset,可以在保存数据之前使用bitwise operators来操作数据。
答案 1 :(得分:3)
您可以访问和保存的最小位数是8 = 1个字节。您可以使用位运算符^&来访问字节中的位。 |
您可以使用:
将第n位设置为1my_byte = my_byte | (1 << n);
其中n为0到7。
您可以使用:
将第n位设置为0my_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)
没有。你将不得不打包字节。因此,您需要在文件中使用一个标头来指定文件中有多少元素,因为您可能会使用未使用的尾随位。