zlib 添加的各种类型的目的是什么,我该如何使用它们?
What is the purpose of the various types added by zlib and how can I use them?
我目前正在尝试,以学习 zlib 的基本用法为目标,创建一个用 C++ 压缩和解压缩文件的小实用程序。我正在使用 zlib 提供的 compress2
和 uncompress
函数来促进这一点。然而,这两个函数都采用了 zlib 特有的各种类型(Bytef
、uLongf
等),它们与 C++ 类型(或者更确切地说,指向每个函数的指针)之间没有任何自动转换这些类型)。这使得与 zlib 接口的简单代码变得更加复杂,除非我根据 zlib 的类型编写我的整个应用程序。
我的问题分为 3 个部分:
- 与我在自己的文件中使用 I/O 代码表示文件长度的
unsigned long
等内置类型相比,这些类型的用途是什么?
- 使用这些类型的正确方法是什么?我可以重新解释将
char
指向数据的指针强制转换为(解)压缩为 Bytef
指针,而不更改 char 数组长度的数据长度吗?因为 char
是一个字节,而 Bytef
的名字表明它是相同的长度,我想我可以,但我想确定一下。我可以简单地将 unsigned long
(或其他非 zlib 整数类型)分配给 uLongf
和其他 zlib 看似整数的类型吗?
- zlib 关于这些类型的官方文档在哪里?
我浏览了 zlib manual 并完整阅读了可能看起来相关的部分,并使用了 ctrl+f 辅助搜索,但无济于事。我的搜索引擎也不知道答案。
- 为了便于携带,您的文件长度应使用
off_t
,而不是 unsigned long
。在某些系统上,它们的大小不同,off_t
更长。
- 是的,您可以在
Bytef
和 char
之间进行转换。 (Bytef
实际上是 unsigned char
,但不需要转换。) uLong
只是 unsigned long
。 (参见 zconf.h。)
- zlib 的文档是 zlib.h,其中这些类型作为函数的参数被调用。您可以使用
zlibCompileFlags()
来确定每种类型中的位数。 (参见 zlib.h。)
我目前正在尝试,以学习 zlib 的基本用法为目标,创建一个用 C++ 压缩和解压缩文件的小实用程序。我正在使用 zlib 提供的 compress2
和 uncompress
函数来促进这一点。然而,这两个函数都采用了 zlib 特有的各种类型(Bytef
、uLongf
等),它们与 C++ 类型(或者更确切地说,指向每个函数的指针)之间没有任何自动转换这些类型)。这使得与 zlib 接口的简单代码变得更加复杂,除非我根据 zlib 的类型编写我的整个应用程序。
我的问题分为 3 个部分:
- 与我在自己的文件中使用 I/O 代码表示文件长度的
unsigned long
等内置类型相比,这些类型的用途是什么? - 使用这些类型的正确方法是什么?我可以重新解释将
char
指向数据的指针强制转换为(解)压缩为Bytef
指针,而不更改 char 数组长度的数据长度吗?因为char
是一个字节,而Bytef
的名字表明它是相同的长度,我想我可以,但我想确定一下。我可以简单地将unsigned long
(或其他非 zlib 整数类型)分配给uLongf
和其他 zlib 看似整数的类型吗? - zlib 关于这些类型的官方文档在哪里?
我浏览了 zlib manual 并完整阅读了可能看起来相关的部分,并使用了 ctrl+f 辅助搜索,但无济于事。我的搜索引擎也不知道答案。
- 为了便于携带,您的文件长度应使用
off_t
,而不是unsigned long
。在某些系统上,它们的大小不同,off_t
更长。 - 是的,您可以在
Bytef
和char
之间进行转换。 (Bytef
实际上是unsigned char
,但不需要转换。)uLong
只是unsigned long
。 (参见 zconf.h。) - zlib 的文档是 zlib.h,其中这些类型作为函数的参数被调用。您可以使用
zlibCompileFlags()
来确定每种类型中的位数。 (参见 zlib.h。)