我正在尝试实现用于压缩的霍夫曼算法,这需要将可变长度的位写入文件。C++ 中是否有任何方法可以将 1 位粒度的可变长度数据写入文件?
Krish_Amrita
问问题
2773 次
5 回答
9
不,您可以写入文件的最小数据量是一个字节。
您可以使用bitset使操作位更容易,然后使用ofstream写入文件。如果您不想使用 bitset,则可以在保存数据之前使用按位运算符来操作数据。
于 2009-04-05T14:15:10.707 回答
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);
更多细节在这里。
于 2009-04-05T14:25:32.523 回答
2
klew 的答案可能是您想要的答案,但只是为 Bill 所说的添加一些内容,Boost 库有一个dynamic_bitset,我发现它在类似情况下很有帮助。
于 2009-04-05T15:14:25.807 回答
2
您需要的有关位旋转的所有信息都在这里:
您如何设置、清除和切换单个位?
但是您可以放入文件中的最小对象是一个字节。
我会使用 dynamic_bitset ,每次大小大于 8 时,将底部的 8 位提取到一个字符中并将其写入文件,然后将剩余的位向下移动 8 位(重复)。
于 2009-04-05T15:44:16.497 回答
1
不,您将不得不打包字节。因此,您需要在文件中指定一个标头来指定文件中有多少元素,因为您可能有未使用的尾随位。
于 2009-04-05T15:38:53.577 回答