首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.IO.Compression.DeflateStream数据格式

System.IO.Compression.DeflateStream数据格式
EN

Stack Overflow用户
提问于 2016-10-09 03:54:46
回答 1查看 2.4K关注 0票数 1

我需要能够用PowerShell压缩数据流,并使用zlib用我的C程序解压缩它。

我正在使用System.IO.Compression.DeflateStream在PowerShell中进行压缩,但是在我的C程序中使用zlib解压缩不起作用。

显然,DeflateStream向输出添加了额外的数据/头。如果是这样的话,我想知道它的格式,这样我就可以用zlib实现解压缩。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-09 04:40:58

回答我自己的问题,其实正好相反。

System.IO.Compression.DeflateStream不添加任何额外的数据,它输出一个没有头/元数据的原始放气流。

实际上,我必须将ZLib头添加到流中。见RFC 1950

这个答案也帮助了我:

zlib头看起来像什么?

详细地说,zlib头中必须有两个字节:

代码语言:javascript
复制
0   1
+---+---+
|CMF|FLG|
+---+---+

第一个字节(CMF):

第一个字节的每一个小字节(半字节)都有一个含义:

代码语言:javascript
复制
bits 0 to 3  CM     Compression method
bits 4 to 7  CINFO  Compression info

您可以在我前面提到的答案中看到更详细的内容。

二字节(FLG):

FLG (标志)此标志字节按以下方式划分:

代码语言:javascript
复制
bits 0 to 4  FCHECK  (check bits for CMF and FLG)
bit  5       FDICT   (preset dictionary)
bits 6 to 7  FLEVEL  (compression level)

最常见的标题是:

代码语言:javascript
复制
78 01 - No Compression/low
78 9C - Default Compression
78 DA - Best Compression

我在78 9C的输出之前添加了标题System.IO.Compression.DeflateStream,但是还有一个步骤,@Mark在评论中说:我们必须在流的末尾添加一个Adler-32校验和。

编辑:

最后,我试图重新发明轮子。我可以在System.IO.Compression.GZipStream压缩中使用PowerShell,在解压缩中只使用inflateInit2(),一切都应该可以(感谢@Mark的建议)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39939869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档