当offset太大(大于signed int 2 ^ 32的范围)时,gzseek(zlib)会失败?

时间:2017-03-07 02:16:15

标签: c++ compression zlib

我正在使用zlib 1.2.11。当我使用gzseek时,偏移量大于signed int的范围(2 ^ 32的一半);我把bytes_read作为-1。有没有办法使用64位偏移。

以下是gzlib.c

中gzseek64定义的摘录
if (state->mode == GZ_READ) {
        n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?(unsigned)offset : state->x.have;
        state->x.have -= n;
        state->x.next += n;
        state->x.pos += n;
        offset -= n;
    }

这里n是无符号整数,它只能容纳32位......即使我的偏移量是64位,如何保持该值......如果我错了,请纠正我

更多调查结果: 声明宏Z_LARGE64后... gzseek接受64位偏移但... 当我传递一个大的偏移时,返回的字节返回的是大的负值,我认为它与 __ int64到unsigned int 转换有关

1 个答案:

答案 0 :(得分:0)

使用Z_LARGE64编译库,然后使用该lib构建应用程序。在Z_LARGE64之前的应用程序中包括#include "zlib.h"。然后使用gzseek64()