我正在实现一个程序来执行霍夫曼压缩/解压缩(为了学习/娱乐,所以我不想使用现有的库/程序)。
我设法构建了压缩三,所以我有一个表格,其中包含所有字符及其各自的压缩表示形式。例如:
a = 0010 b = 01101 c = 0011 d = 1101 e = 101
现在我的想法是将这些位存储到一个容器中(例如,一个 char 或 int 变量),然后将它们输出到一个文件中。
我知道如何使用按位运算将位打包/解包到 char 或 int 中。然而,我面临的问题是压缩版本中的位数与我可用的位数不匹配。
假设我想使用上表压缩字符串“abc”。我将从压缩“a”开始,因此将 0010 打包到一个 char 变量中。接下来我将压缩“b”,但这需要 5 位,而我的 char 变量上只剩下 4 位。我可以使用另一个变量,但是跟踪哪个变量使用了多少位会变得一团糟。
使用 int 可以让我使用 32 位,但是一旦我接近极限就会发生同样的问题。