我正在使用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 转换有关
答案 0 :(得分:0)
使用Z_LARGE64
编译库,然后使用该lib构建应用程序。在Z_LARGE64
之前的应用程序中包括#include "zlib.h"
。然后使用gzseek64()