c - 我可以强制 zlib 使用 RLE 编码和 FIXED Huffman 树吗?
问题描述
我正在尝试为没有内存的架构创建一个与 zlib 兼容的压缩器/解压缩器。我的寄存器数量有限,但没有内存缓冲区。我的例程必须以与 zlib 兼容的方式压缩文件,以便它们可以在计算机上解压缩。反过来是不正确的。我只需要解压我自己的文件。
由于我没有记忆,动态霍夫曼已经出局了。我必须使用 RFC 1951 第 3.2.6 节中定义的固定霍夫曼树。但是,我也只想做 RLE,因为我没有任何超过距离 1 的文字的记忆。我试图了解是否可以强制标准 zlib 库以这种格式输出压缩文件,所以我可以通过运行测试向量两种实现并验证我的实现都提供与 zlib 库完全相同的输出。
但是,我看不到任何强制 zlib 使用 Z_RLE和Z_FIXED 创建文件的选项。如果我指定 Z_RLE,它似乎想要构建动态霍夫曼树。如果我指定 Z_FIXED,我看不到任何将匹配距离限制为 1 的方法。
我是否正确理解 zlib 不支持这种模式(Z_RLE + Z_FIXED),并且不存在强制类似输出的选项组合?如果这目前不可能,并且我想在 zlib 中实现一个新模式以进行测试,是否像全局搜索 Z_FIXED 实例并将 ( == Z_FIXED) 的每个实例更改为 ( == Z_FIXED) 一样简单|| (== Z_RLE)?
感谢您提供任何帮助。
解决方案
目前没有一种方法可以将距离限制为一个并且仅使用固定代码。
在trees.c 中有一个地方寻找Z_FIXED
. 您可以将这一事件更改为s->strategy == Z_FIXED || s->strategy == Z_RLE
. 然后,如果您请求Z_RLE
,它将执行您的要求。
推荐阅读
- r - 多个 HTML 页面
- nginx - 如果文件第一次不存在,Linux VFS 是否会缓存查找?
- c# - Identity Server OAuth 2.0 代码授权 - 如何在同意屏幕中请求自定义范围的权限
- python - 如何在空格和标记之间搜索字符串?Python
- c# - 后处理程序不解析序列化表单
- griddb - 在安装“GridDB Python 客户端”时。无法设置 PYTHON_RESOURCE
- android - Android 11 / API 30 - 打开 YouTube 链接
- javascript - 如何将提取的文本转换为 pdf 缓冲区?
- c++ - 在基 CRTP 类的 requires 子句中使用派生类的数据成员
- android - Jetpack Compose 中的行/列动画