首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost中的Zlib压缩::与zlib.NET不兼容的iostreams

boost中的Zlib压缩::与zlib.NET不兼容的iostreams
EN

Stack Overflow用户
提问于 2010-05-12 21:27:02
回答 1查看 1.2K关注 0票数 3

我希望在我的C#之间以ZLIB格式向C++应用程序发送压缩数据。在C++中,我使用了在boost::iostreams中可用的zlib_压缩器/zlib_解压缩器。在C#中,我目前正在使用zlib.NET库中可用的ZOutputStream。首先,当我使用两个库压缩相同的数据时,结果看起来是不同的:

  1. boost::iostreams::zlib_compressor:

63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00

(zlib.ZOutputStream):

  1. zlib.NET zlib.NET

78 9C 63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00 4F 31 63 8D

(请注意zlib.NET中存在的78 9C模式,但没有出现在boost中)。

此外,当我在zlib.NET中压缩的boost中解压缩数据时,我无法从流中读取提示有问题的内容。当我试图解压缩在boost中压缩的数据时,它确实有效。

有人知道出了什么问题吗?

谢谢,

约翰

EN

回答 1

Stack Overflow用户

发布于 2010-05-13 08:15:02

这是因为boost::iostreams::zlib_compressor代码正在生成原始的压缩数据,而zlib.NET则添加了页眉和页脚,因此数据采用了压缩格式。

作为证据,请考虑Tcl会话的日志:

代码语言:javascript
复制
% set s {78 9C 63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00 4F 31 63 8D}
78 9C 63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00 4F 31 63 8D
% set b [binary format H* [join $s ""]];string length $b
23
% zlib decompress $b
ðStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringString
% zlib inflate $b
data error
% set s {63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00}
63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00
% set b [binary format H* [join $s ""]];string length $b
17
% zlib decompress $b
data error
% zlib inflate $b
ðStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringString

( zlib decompress命令以“压缩”格式展开数据,zlib inflate命令以“原始压缩”格式展开数据。)

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

https://stackoverflow.com/questions/2822877

复制
相关文章

相似问题

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