0

我正在尝试实现 LZW 来压缩基于 ASCII 的文本文件,我需要帮助。

假设我有一个文本文件,上面写着“BABAABAAAA”,我使用我的代码使用 LZW 算法对其进行压缩。结果的输出将被写入一个文本文件,其结果是

66|65|256|257|65|260|65

现在的问题是,压缩文件的大小将比原始文件大,因为它将代码的每个字符都计算为单个字符,而不是将每个代码计算为单个整数。因此,它不是将 65 读取为 01000001,而是将 65 视为 2 个 ascii 字符,即 00110110 (6) 00110101 (5)。这甚至不包括标记('|')。

4

1 回答 1

0

在将某些文本转换为整数系列后,例如66|65|256,您不应该在文本模式下将其作为 9 个字符的系列写入文件。您应该以二进制模式打开输出文件并以二进制形式写入数字(根本不要写分隔符|)。

在 LZW 的情况下,有两种方法:要么使用固定二进制宽度,从而限制字典的大小,要么实现(稍微难一点)可变宽度版本,其中每个数字使用与 NEXT 自由字典一样多的二进制数字钥匙。

回到您的示例,66|65|256|257|65|260|65固定宽度为 9 位为您提供7 * 9 = 63位,即8字节。

于 2014-04-23T14:45:54.727 回答