C - 在嵌入式设备上膨胀(解压缩)数据流



我打算对通过慢速串行接口传输的数据流使用压缩。解压缩应该在资源有限(没有操作系统、没有线程、有限的内存(的低成本微控制器上进行。

在之前的类似配置中,我使用了 zlib 的 puff.c,但在这种情况下,a 有一个缓冲区存储之前的所有数据,并且可以一次膨胀。

在我的实际情况下,我没有足够的内存来容纳这些缓冲区,所以我需要逐步膨胀数据。因此,与其让 puff 在缓冲区上工作,我需要能够在每次新数据到达时调用它,从而在后续调用之间保持内部状态。

在我开始深入研究 zlib 或 zlibs puff.c 之前,有谁知道这类问题是否已经在某个地方解决了?

.GIF文件格式

压缩算法(LZW,LZ78的变体(几乎只需要在内存中维护一个哈希表。当表填满时,它将被清空,并且该过程会重复,这意味着表不会无限增长。也没有必要保留压缩数据。很少需要维护其他状态。使用这样的算法(也许,通过减小哈希表大小(,您可以在数据进入时解压缩数据。

我没有研究过其他LZ算法,但我希望(部分或全部?(它们在性质上是相似的。

我用过LZSS。我使用了奥村春彦的代码作为基础。它使用未压缩数据(2K(的最后一部分作为字典。如果内存中所有未压缩的数据都可用,则可以修改我链接的代码以几乎不使用内存。通过一些谷歌搜索,你会发现很多不同的实现与各种许可证。

另一种选择可能是实现LZF的lzfx库。我还没有用过它,但它看起来不错。还使用以前的结果,因此内存要求较低,并在 BSD 许可证下发布。

感谢您的所有意见和建议。

经过调查,我会坚持使用puff.c并对其进行修改或者我将使用我在这里找到的 uzlib:https://github.com/pfalcon/uzlib/

最新更新