下面有一个代码片段,我不太清楚最后一行是做什么的。更具体地说,什么是Bytef[]?
FILE* read_file_handle = fopen(read_filename, "rb");
fseek(read_file_handle, 0, SEEK_END);
size_t no_bytes_to_read = ftell(read_file_handle);
Bytef* read_buffer = new Bytef[no_bytes_to_read];
Bytef[]是做什么的?而且,如果有人知道,在将其移植到PHP时,我将如何实现呢?我认为它可能是一个数组,但是从来没有定义过这样的变量,使用新的关键字就没有意义了。
有人能帮忙吗?
霍什
编辑:好的,由于用户默认,它似乎是在zlib中定义的。它在这个文件在第124行中被定义为这个文件在第124行,根据这一点,有人知道Bytef的类型是什么吗?字节被定义为char (typedef unsigned char Byte;
),#define FAR
被定义为:#define FAR
,有帮助吗?
发布于 2018-09-09 06:46:55
Bytef在zlib源代码中定义。在输入以下消息时,我下载了最新版本的zlib : zlib-1.2.11。在这个目录中(解压缩后),
find . -type f | xargs grep Bytef
many lines ignored
......
./zconf.h: typedef Byte FAR Bytef;
......
more lines ignored
注意,字节不是C或C++中的类型。所以我得多读几行代码。FAR是在zlib中定义的宏。较短的grep搜索模式将导致更多的行。我增加了一些过滤器。
find . -type f | xargs grep Byte | sed '/Bytef/d' | sed '/test/d' | grep typedef
./ChangeLog:- Correct Macintosh avoidance of typedef Byte in zconf.h
//**This is what you want:
./zconf.h:typedef unsigned char Byte; /* 8 bits */
./zconf.h: typedef Byte const *voidpc;
./zconf.h: typedef Byte FAR *voidpf;
./zconf.h: typedef Byte *voidp;
./zconf.h.cmakein:typedef unsigned char Byte; /* 8 bits */
./zconf.h.cmakein: typedef Byte const *voidpc;
./zconf.h.cmakein: typedef Byte FAR *voidpf;
./zconf.h.cmakein: typedef Byte *voidp;
./zconf.h.in:typedef unsigned char Byte; /* 8 bits */
./zconf.h.in: typedef Byte const *voidpc;
./zconf.h.in: typedef Byte FAR *voidpf;
./zconf.h.in: typedef Byte *voidp;
你可以看到,C使用了大量的类型防御。有时候是心灵旋转。我将向您展示如何查询源项目,这样您就可以为类似类型的问题找到答案。
FAR是zcon.h中定义的另一个宏,但它并不是那么容易理解。很多的发展和发展,这基本上是什么都没有。
当您包含zlib.h时,新的Bytef10与新的未标记的char10是相同的。你甚至可以加远。在zlib作者使用的示例代码中:
unsigned char in[CHUNK];
而不是拜特夫inCHUNK。这里的块是另一个宏。在C中使用了大量的宏。
https://stackoverflow.com/questions/7706241
复制相似问题