Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c+中使用zlib充气()+;通过PHP ZLIB_ENCODING_原始编码数据解压_Php_C++_C_Zlib - Fatal编程技术网

在c+中使用zlib充气()+;通过PHP ZLIB_ENCODING_原始编码数据解压

在c+中使用zlib充气()+;通过PHP ZLIB_ENCODING_原始编码数据解压,php,c++,c,zlib,Php,C++,C,Zlib,在压缩代码 php压缩时,代码为 ZLIbjEnCONDIONIORIGATEATION/COD>并输出十六进制数据,我可以在C++项目中使用 ZLIB < /COD>代码> 根据这里的示例(): exputffer再次包含“hello world” 我想知道zlibinflate()是否也会解压缩通过PHP生成的zlib\u编码($str,zlib\u ENCODING\u RAW)原始数据 从zlib文档中,我认为不是: 放气压缩方法(是本文件中唯一支持的方法 版本) #定义Z_缩小8 但是

在压缩代码<代码> php<代码>压缩时,代码为<代码> ZLIbjEnCONDIONIORIGATEATION/COD>并输出十六进制数据,我可以在C++项目中使用<代码> ZLIB < /COD>代码> 根据这里的示例():

exputffer
再次包含“hello world”

我想知道
zlib
inflate()
是否也会解压缩通过
PHP
生成的
zlib\u编码($str,zlib\u ENCODING\u RAW)原始数据

从zlib文档中,我认为不是:

放气压缩方法(是本文件中唯一支持的方法 版本

#定义Z_缩小8

但是
PHP
的函数名
zlib\u encode()
和define
zlib\u encode\u RAW
似乎暗示
zlib
是否支持它?如果是这样,我应该使用什么函数和/或参数?

PHP名称(通常)令人困惑。我将假设
ZLIB_ENCODING_RAW
表示原始平减数据(根据RFC 1951),并且似乎
ZLIB_ENCODING_deflate
实际上表示ZLIB包装的平减数据(根据RFC 1950)

如果这是正确的,他们应该分别调用它们
ZLIB\u ENCODING\u DEFLATE
ZLIB\u ENCODING\u ZLIB
。但我离题了


您可以使用zlib库解码原始放气数据,方法是使用
inflateInit2()
而不是
inflateInit2()
,并将
-15
作为第二个参数。

谢谢,这非常有效。(通过
PHP
RAW
压缩数据基本上与
DEFLATE
压缩数据相同,只是它在开始时遗漏了2个字节,在结束时遗漏了4个字节,最后两个字节(在4字节尾之前)你的“假设”重新命名,并就定义应该如何命名提出了建议。PHP的
RAW
确实是“RAW”DEFLATE,没有标题和CRC,PHP的
DEFLATE
确实是ZLIB变体(标题和CRC)。PS忽略我关于两个字节不同的评论(这是一个错误的观察)
<?php
$str = 'hello world';
$enc = zlib_encode($str, ZLIB_ENCODING_DEFLATE);
echo bin2hex($enc);
?>
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);