【发布时间】:2021-02-19 04:42:03
【问题描述】:
当我使用编码ZLIB_ENCODING_DEFLATE 压缩PHP 中的字符串并输出十六进制数据时,我可以在c++ 项目中使用zlib deflate() 将其转换回原始字符串。
这里的例子(https://www.php.net/manual/en/function.zlib-encode.php):
<?php
$str = 'hello world';
$enc = zlib_encode($str, ZLIB_ENCODING_DEFLATE);
echo bin2hex($enc);
?>
在 c++ 中,先将十六进制字符串转换为二进制数据后:(简化代码)
z_stream d_stream;
d_stream.zalloc = (alloc_func)0 ;
d_stream.zfree = (free_func)0 ;
d_stream.opaque = (voidpf)0
d_stream.next_in = InBuffer ;
d_stream.avail_in = InBufferLen ;
d_stream.next_out = OutBuffer ;
d_stream.avail_out = OutBufferLen ;
int err = inflateInit(&d_stream) ;
while (err == Z_OK)
err = inflate(&d_stream, Z_NO_FLUSH);
err = inflateEnd(&d_stream);
OutBuffer 再次包含“hello world”
我想知道zlib inflate() 是否也解压缩通过PHP 生成的zlib_encode($str, ZLIB_ENCODING_RAW); 原始数据?
从 zlib 文档中我认为不是:
deflate 压缩方法(此方法中唯一支持的 版本)。
#define Z_DEFLATED 8
但是PHP的函数名zlib_encode()和定义ZLIB_ENCODING_RAW似乎暗示zlib支持吗?如果是这样,我使用什么函数和/或参数?
【问题讨论】: