我希望在我的C#之间以ZLIB格式向C++应用程序发送压缩数据。在C++中,我使用了在boost::iostreams中可用的zlib_压缩器/zlib_解压缩器。在C#中,我目前正在使用zlib.NET库中可用的ZOutputStream。首先,当我使用两个库压缩相同的数据时,结果看起来是不同的:
63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00
(zlib.ZOutputStream):
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中压缩的数据时,它确实有效。
有人知道出了什么问题吗?
谢谢,
约翰
发布于 2010-05-13 08:15:02
这是因为boost::iostreams::zlib_compressor代码正在生成原始的压缩数据,而zlib.NET则添加了页眉和页脚,因此数据采用了压缩格式。
作为证据,请考虑Tcl会话的日志:
% 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命令以“原始压缩”格式展开数据。)
https://stackoverflow.com/questions/2822877
复制相似问题