我正在尝试实现用于压缩的哈夫曼算法,这需要将可变长度的位写入文件。在C++中是否有一种方法可以以1位粒度写入可变长度数据到文件中?
我正在尝试实现用于压缩的哈夫曼算法,这需要将可变长度的位写入文件。在C++中是否有一种方法可以以1位粒度写入可变长度数据到文件中?
您可以访问和保存的最小位数为8 = 1字节。您可以使用位运算符^ & | 访问字节中的位。
您可以使用以下方法将第n个位设置为1:
my_byte = my_byte | (1 << n);
n的取值范围为0到7。
您可以使用以下方法将第n位设置为0:
my_byte = my_byte & ((~1) << n);
my_byte = my_byte ^ (1 << n);
更多细节在这里。
以下是关于位操作的所有信息:
如何在C语言中设置、清除和切换单个位?
但是,可以在文件中放置的最小对象是一个字节。
我建议使用dynamic_bitset,每当其大小超过8时,提取底部的8个位到一个char类型变量并将其写入文件,然后将剩余的位向下移动8个位置(重复此操作)。