低内存条件下的LZW压缩/解压缩

Man*_*nas 8 c compression embedded algorithm lzw

任何人都可以指出如何在低内存条件下(<2k)实现lzw压缩/解压缩.那可能吗?

old*_*mer 5

每个人都使用的 zlib 库在其他问题中显得臃肿(对于嵌入式)。我很确定它不适合你的情况。我的内存多一点,可能是 16K,但无法安装。它分配和清零大块内存并保留内容的副本等。该算法也许可以做到这一点,但找到现有代码是一个挑战。

我去了http://lzfx.googlecode.com 解压缩循环很小,它是旧的 lz 类型压缩,依赖于先前的结果,因此您需要访问未压缩的结果...下一个字节是 0x5 ,下一个字节是 0x23,接下来的 15 个字节是 15 200 字节之前的副本,接下来的 6 个字节是 127 之前的副本......较新的 lz 算法是基于可变宽度表的,可以很大或增长取决于如何实施。

我正在处理重复的数据,并试图将几 K 压缩为几百,我认为压缩率约为 50%,不是很好,但完成了工作,并且解压例程很小。上面的lzfx包很小,不像zlib那样,有两个主要函数,代码就在那里,而不是几十个文件。如果您愿意,您可以更改缓冲区的深度,也许可以改进压缩算法。我确实必须修改解压缩代码(可能是 20 或 30 行代码),它的指针很重,我将其切换到数组,因为在我的嵌入式环境中,指针位于错误的位置。烧伤可能是一个额外的寄存器,也可能不是,这取决于你如何实现它和你的编译器。我也这样做了,这样我就可以抽象字节的获取和存储,因为我将它们打包到不可字节寻址的内存中。

如果您发现更好的东西,请在此处发布或通过 stackoverflow 联系我,我对其他嵌入式解决方案也非常感兴趣。我搜索了很多,上面是我发现的唯一有用的,我很幸运,我的数据使用该算法压缩得足够好......目前。


R..*_*R.. 0

我最好的建议是检查BusyBox源代码,看看它们的 LZW 实现是否足够小,可以在您的环境中工作。