C# 使用SharpZipLib解压zlib压缩数据 >我正在看下面的C++代码行,其中包含“ZLIB .h”< < /P> int err = compress2(compressed.get(), &dest_len, reinterpret_cast<const unsigned char *>(plain_text.c_str()), source_len, 9);

C# 使用SharpZipLib解压zlib压缩数据 >我正在看下面的C++代码行,其中包含“ZLIB .h”< < /P> int err = compress2(compressed.get(), &dest_len, reinterpret_cast<const unsigned char *>(plain_text.c_str()), source_len, 9);,c#,zlib,sharpziplib,C#,Zlib,Sharpziplib,这说明它需要一本字典。我知道如何设置字典,但我不知道如何基于zlib.h compress函数设置字典如何创建必要的预设字典进行解密? 注: 下面是我试图用C语言复制的代码行# 如果uncompressed为空,dest len就是4*src_len,src_len就是压缩长度。以纯文本形式存储的压缩文本 以下是在我的C#程序中检测到的前2个字节: 78 3f (0111100011111) 有人指出,鉴于compress2代码给定,这没有意义 对不起,我的问题中有任何错误,我在这里没有问太多问

这说明它需要一本字典。我知道如何设置字典,但我不知道如何基于zlib.h compress函数设置字典如何创建必要的预设字典进行解密?

注: 下面是我试图用C语言复制的代码行#

如果uncompressed为空,dest len就是4*src_len,src_len就是压缩长度。以纯文本形式存储的压缩文本

以下是在我的C#程序中检测到的前2个字节: 78 3f (0111100011111)

有人指出,鉴于compress2代码给定,这没有意义


对不起,我的问题中有任何错误,我在这里没有问太多问题。

没有,
compress2()
不使用字典。您的数据可能不会完好无损。您应该将要解压缩的内容的前几个字节(如C#端所示)以十六进制输入问题。

否,
compress2()
不使用字典。您的数据可能不会完好无损。您应该将要解压缩的内容的前几个字节(如C#端所示)用十六进制表示。

如果有人试图使用zlib的compress2,并试图用C#处理此输入,请注意如何接收压缩数据。Compress2()不使用预设字典

具体来说,请确保前2个字节有意义。我对一个奇怪的第二个字节不屑一顾,因为第一个字节是正确的,但我真的读了它,并与


有很多方法可以正确读取字节,但我的错误是试图使用Encoding.Ascii.GetBytes读取它们。不要那样做

如果有人试图使用zlib的compress2,并试图用C#处理此输入,请注意如何接收压缩数据。Compress2()不使用预设字典

具体来说,请确保前2个字节有意义。我对一个奇怪的第二个字节不屑一顾,因为第一个字节是正确的,但我真的读了它,并与


有很多方法可以正确读取字节,但我的错误是试图使用Encoding.Ascii.GetBytes读取它们。不要那样做

我没有写SharpZipLib。我知道,你不久前在另一篇stackoverflow帖子上推荐了它。我不是想把你叫到这里来,或者别的什么,只是想证明至少有人认为图书馆是有用的。对不起,有什么误会!现在查看您的答案更新:意外地使用ASCII编码转换了字节(在C#中,任何它不希望的内容都会设置为63(以10为基数).非常令人沮丧,但希望这对将来的人有所帮助。如果这应该被删除,我会这样做。你应该用解决方案回答你自己的问题。我没有写SharpZipLib。我理解,你不久前在另一篇stackoverflow帖子上推荐了它。我不是有意在这里传唤你,或者只是想建立一个至少有人认为这个库是有用的。抱歉,有任何误解!现在查看您的答案更新:意外地使用ASCII编码转换了字节(在C#中,任何它不希望的都设置为63(以10为基数).非常令人沮丧,但希望这对将来的人有所帮助。如果这应该被删除,我会这样做。你应该用解决方案回答你自己的问题。
Inflater inflater = new Inflater(false);
inflater.SetInput(bytes);
int ret = inflater.Inflate(outBuffer, 0, 2047);
if (ret == 0)
{
    Console.WriteLine(inflater.IsNeedingDictionary);
    Console.WriteLine(inflater.IsNeedingInput);
    Console.WriteLine(inflater.Adler);
}
int err = uncompress(uncompressed.get(), &dest_len, plain_text.get(), src_len);