gpt4 book ai didi

c - 使用 miniz 解压 zip 文件会退出,状态为 -1 (TINFL_STATUS_FAILED)

转载 作者:行者123 更新时间:2023-11-30 15:17:43 28 4
gpt4 key购买 nike

我需要使用 miniz 库来解压缩项目中的一些 zip 文件。问题是这个函数

tinfl_decompress

总是以状态 TINFL_STATUS_FAILED 退出.

我做了一些调试,发现了 miniz.c 中有问题的代码行:

第 1452 行:

counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) || (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8));

计数器设置为 1;

第 1453 行:

if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (size_t)(1U << (8U + (r->m_zhdr0 >> 4)))));

(((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (size_t)(1U << (8U + (r->m_zhdr0 >> 4)))))评估结果为 false;然而,由于 counter 设置为 1,counter 仍等于 1。

第 1454 行:

if (counter) { TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); }

由于计数器值为 1,因此调用宏 TINFL_CR_RETURN_FOREVER。这样的宏跳转到标签common_exit .

除了我的项目内部之外,我还使用库提供的示例测试了 miniz 库。具体来说,我尝试使用 example5 解压缩我自己的个人 zip 存档以及由 miniz 库中包含的 example2 生成的存档。

在命令提示符处发出以下命令

example5.exe d __mz_example2_test__.zip __mz_example2_test__.decompress

生成以下输出:

miniz.c example5 (demonstrates tinfl/tdefl)
Mode: d, Level: 9
Input File: "__mz_example2_test__.zip"
Output File: "__mz_example2_test__.decompress"
Input file size: 33768
tinfl_decompress() failed with status -1!

我该如何解决这个问题?我做错了什么?

最佳答案

第 1452 行正在寻找 zlib header 。 zlib 格式不是 zip 格式。您需要编写自己的 zip 格式解码器,然后在原始 inflate 模式下使用 miniz,该模式不会查找 zlib header ,而是在您通过解码 zip header 找到的位置处解码原始 deflate 数据。

或者您可以使用 libzip ,它会为您完成这一切。

关于c - 使用 miniz 解压 zip 文件会退出,状态为 -1 (TINFL_STATUS_FAILED),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32077709/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com