【问题标题】:Can I force zlib to use RLE encoding AND FIXED Huffman trees?我可以强制 zlib 使用 RLE 编码和 FIXED Huffman 树吗?
【发布时间】:2021-03-22 15:53:14
【问题描述】:

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

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

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

我是否正确理解 zlib 不支持这种模式 (Z_RLE + Z_FIXED),并且不存在会强制类似输出的选项组合?如果这目前不可能,并且我想在 zlib 中实现一个新模式以进行测试,是否像全局搜索 Z_FIXED 实例并将 (== Z_FIXED) 的每个实例更改为 (== Z_FIXED) 一样简单|| (== Z_RLE)?

感谢您的帮助。

【问题讨论】:

  • 如果失败;以下是健全的。在明文中使用测试向量;使用您的实现通过压缩运行它们,并使用标准 zlib 解压缩,看看您是否获得了明文。

标签: c zlib huffman-code


【解决方案1】:

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

trees.c 中有一处查找Z_FIXED。您可以将那一次更改为s->strategy == Z_FIXED || s->strategy == Z_RLE。然后,如果您请求 Z_RLE,它会按照您的要求进行操作。

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多