如何以字节表示LZW输出?

时间:2018-03-10 14:19:28

标签: compression byte lzw

我找到了LZW算法的实现,我想知道如何将其输出(即int列表)表示为字节数组。

我曾尝试过一个字节,但如果输入时间过长,字典会有超过256个条目,因此我无法转换。

然后我尝试添加一个额外的字节来指示用于存储值的字节数,但在这种情况下,我必须为每个值使用2个字节,这不足以压缩。

如何优化此功能?

2 个答案:

答案 0 :(得分:1)

作为位,而不是字节。您只需要一个简单的例程,将任意数量的位写入字节流。它只保留一个单字节缓冲区,在其中放置位,直到有8位。然后写入比字节,清除缓冲区,然后重新开始。另一方面,这个过程是相反的。

当你到达最后,只要写入最后一个字节缓冲区,如果不为空,其余的位设置为零。

您只需要确定当前压缩状态下每个符号需要多少位。当从流中提取位时,可以在另一方进行相同的确定。

答案 1 :(得分:0)

在他1984年关于LZW的文章中,T.A。 Welch实际上没有说明如何编码代码"但是描述了将输入字符串映射到固定长度的代码",继续"使用12位代码很常见" #34 ;. (允许三个八位字节和两个代码之间的双射映射。)
BSD compress(1) command字面上并没有按照,但引入了标题,如果用于编码LZW 输出代码的位,则有趣的部分是最大数字的规范< / em>,允许解压缩程序适当地调整解压缩表的大小,或者以受控的方式尽早失败。 (但是对于第一个,)代码只用必要的整数位编码,从9开始 另一种方法是使用Arithmetic Coding尤其是,如果使用与不同的模型,则每个代码都是同等可能的