我可以强制 zlib 使用 RLE 编码和固定霍夫曼树吗?

Can I force zlib to use RLE encoding AND FIXED Huffman trees?

我正在尝试为没有内存的架构创建一个 zlib 兼容 compressor/decompressor。我的寄存器数量有限,但没有内存缓冲区。我的例程必须以与 zlib 兼容的方式压缩文件,以便它们可以在计算机上解压缩。反之则不然。我只需要解压自己的文件即可

由于我没有记忆,动态哈夫曼就出来了。我必须使用 RFC 1951 第 3.2.6 节中定义的固定霍夫曼树。但是,我也只想做 RLE,因为我没有任何超出距离 1 的文字的记忆。我试图了解我是否可以强制标准 zlib 库以这种格式输出压缩文件,所以我可以 运行 通过两个实现测试向量并验证我的实现提供与 zlib 库完全相同的输出。

但是,我看不到任何选项可以强制 zlib 使用 Z_RLE AND Z_FIXED 创建文件。如果我指定Z_RLE,它似乎想要构建动态霍夫曼树。如果我指定 Z_FIXED,我看不到任何将匹配距离限制为 1 的方法。

我是否正确理解了 zlib 不支持此模式 (Z_RLE + Z_FIXED),并且不存在强制执行类似输出的现有选项组合?如果目前这是不可能的,并且我想在 zlib 中实现一个新模式用于我的测试,它是否像全局搜索 Z_FIXED 的实例并更改 ( == [=24= 的每个实例一样简单]) 到 ( == Z_FIXED) || ( == Z_RLE)?

感谢您的帮助。

目前没有办法将距离限制为一个并且只使用固定代码。

trees.c 中有一个地方在寻找 Z_FIXED。您可以将该事件更改为 s->strategy == Z_FIXED || s->strategy == Z_RLE。然后,如果您请求 Z_RLE,它会按照您的要求执行。