我试图实施LZW来压缩基于ASCII的文本文件,我需要帮助。
我们说我有一个带有" BABAABAAAA"的文本文件。写在上面,我使用我的代码使用LZW算法压缩它。结果的输出将写在文本文件上,结果为
66|65|256|257|65|260|65
现在问题是,压缩文件的大小将比原始文件大,因为它将代码的每个char计为单个char,而不是将每个代码计为单个整数。因此,不是将65读作01000001,而是将65视为2 ascii char,即00110110(6)00110101(5)。而这甚至没有计算标记(' |')。
答案 0 :(得分:0)
将某些文本转换为一系列整数(如66|65|256
)后,不应将其作为一系列9个字符在文本模式下写入文件。您应该以二进制模式打开输出文件并以二进制形式写入数字(而不是像|
那样写分隔标记。)
对于LZW,有两种方法:要么使用固定的二进制宽度,要么限制字典的大小,要么实现(稍微有点难)可变宽度版本,其中每个数字使用尽可能多的二进制数字。 NEXT免费字典密钥。
回到您的示例,66|65|256|257|65|260|65
的固定宽度为9位,可以得到7 * 9 = 63
位,即8
个字节。