1

我正在实现一个程序来执行霍夫曼压缩/解压缩(为了学习/娱乐,所以我不想使用现有的库/程序)。

我设法构建了压缩三,所以我有一个表格,其中包含所有字符及其各自的压缩表示形式。例如:

a = 0010 b = 01101 c = 0011 d = 1101 e = 101

现在我的想法是将这些位存储到一个容器中(例如,一个 char 或 int 变量),然后将它们输出到一个文件中。

我知道如何使用按位运算将位打包/解包到 char 或 int 中。然而,我面临的问题是压缩版本中的位数与我可用的位数不匹配。

假设我想使用上表压缩字符串“abc”。我将从压缩“a”开始,因此将 0010 打包到一个 char 变量中。接下来我将压缩“b”,但这需要 5 位,而我的 char 变量上只剩下 4 位。我可以使用另一个变量,但是跟踪哪个变量使用了多少位会变得一团糟。

使用 int 可以让我使用 32 位,但是一旦我接近极限就会发生同样的问题。

4

1 回答 1

1

没有办法。您必须跟踪存储结构中留下的位。

这并不是真正的混乱。事实上,尝试起来相对容易。只需将高位存储在剩余存储中,然后将低位存储到新存储中。在每一步,您都需要知道还剩下多少位。

我还建议使用 uint32 类型而不是 char,因为它们具有出色的存储容量。它将需要更少的改组,从而提高速度。

于 2011-12-08T12:35:19.357 回答