用 zlib headers 替换压缩文件的 gzip headers

Replace gzip headers of a compresed file with zlib headers

我知道我可以使用 PHP

进行压缩
gzcompress($contents, 9);

但我不喜欢结果。即使使用最新版本的 zlib,我也会得到比 7zip 输出更大的文件(当然是放气)。

那么如何用 zlib headers 替换 gzip headers(使用 ADLER32 校验和)

您的问题不清楚,但我想您是在问如何获取 7zip 的 gzip 输出并将其转换为 zlib。

您需要解码 gzip header 并将其剥离。 (它可能是 10 个字节,但如果其中有文件名,它可能会更长。)RFC 1952 描述了 header 格式。然后你会在前面加上一个 two-byte zlib header,例如0x78 0xda.

然后从末尾剥离最后八个字节,并按 big-endian 顺序附加未压缩数据的 four-byte Adler-32 总和。您需要自己计算,RFC 1950, or you can adapt the zlib implementation.

中对其进行了描述