gpt4 book ai didi

c++ - gzseek(zlib) 在偏移量太大时失败(大于 signed int 2^32 的范围)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:10 24 4
gpt4 key购买 nike

我正在使用 zlib 1.2.11。当我使用偏移量大于有符号整数范围(2^32 的一半)的 gzseek 时;我得到 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 是 unsigned int,它只能容纳 32 位...即使我的偏移量是 64 位,n 将如何保持该值...如果我错了请纠正我

更多发现:在声明宏 Z_LARGE64 之后...gzseek 接受 64 位偏移量但是...当我传递一个大偏移量时,返回的字节数是一个大负数值,我认为它与 __int64 到 unsigned int 转换

有关

最佳答案

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

关于c++ - gzseek(zlib) 在偏移量太大时失败(大于 signed int 2^32 的范围)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42638972/

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