c++ - zlib 添加的各种类型的目的是什么,我该如何使用它们?
问题描述
我目前正在尝试,以学习 zlib 的基本用法为目标,创建一个小实用程序来压缩和解压缩 C++ 中的文件。我正在使用 zlib 提供的compress2
anduncompress
函数来促进这一点。然而,这两个函数都采用似乎特定于 zlib ( Bytef
,uLongf
等) 的各种类型,而在它们和 C++ 类型(或者更确切地说,指向这些类型中的每一个的指针)之间没有任何自动转换。这使得与 zlib 交互的简单代码更加复杂,除非我基于 zlib 的类型编写整个应用程序。
我的问题有 3 个部分:
unsigned long
与我在自己的文件 I/O 代码中用于表示文件长度的内置类型(如 )相比,这些类型的用途是什么?- 使用这些类型的正确方法是什么?我可以重新解释将我的
char
指向数据的指针转换为(解)压缩到Bytef
指针而不改变我的 char 数组长度的数据长度吗?因为char
是一个字节并且Bytef
的名字暗示它是相同的长度,我想我可以,但我想确定一下。我可以简单地将一个unsigned long
(或其他非 zlib 整数类型)分配给uLongf
其他 zlib 看似整数类型吗? - zlib 关于这些类型的官方文档在哪里?
我浏览了zlib 手册并完整阅读了可能看起来相关的部分,以及 ctrl+f 辅助搜索,但无济于事。我的搜索引擎也不知道答案。
解决方案
- 为了可移植性,您的文件长度应该使用
off_t
,而不是unsigned long
. 在某些系统上,它们的尺寸不同,off_t
而且更长。 - 是的,您可以在 and 之间
Bytef
进行转换char
。(Bytef
实际上是unsigned char
,但不需要转换。)uLong
是简单的unsigned long
。(参见 zconf.h。) - zlib 的文档是 zlib.h,其中这些类型被称为函数的参数。您可以使用
zlibCompileFlags()
来确定每种类型的位数。(参见 zlib.h。)
推荐阅读
- c# - 如何转置数据表以获取 C# 中的第二个数据表?
- python-3.x - 如何使用matplotlib从带有熊猫的未堆叠数据框中绘制多个图表
- python - 试图一次运行多个功能?
- sparql - SPARQL Dbpedia 获得的价值是....的
- javascript - findOne 在 Nodejs 中发送 NULL
- php - mod_fcgid:stderr:PHP 致命错误:调用未定义函数 bcpow()
- oracle - 而不是触发器不更新我的表
- xml - 如何解释scoverage.xml 报告
- python - 为存储在文件夹中的不同数据集创建不同的数据框
- react-native - FlatList 检测滚动项