gpt4 book ai didi

c# - boost::iostreams 中的 Zlib 压缩与 zlib.NET 不兼容

转载 作者:行者123 更新时间:2023-11-30 16:33:55 26 4
gpt4 key购买 nike

我想以 ZLIB 格式在我的 C# 和 C++ 应用程序之间发送压缩数据。在 C++ 中,我使用 boost::iostreams 中可用的 zlib_compressor/zlib_decompressor。在 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

  1. zlib.NET(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

(注意 78 9C 模式存在于 zlib.NET 中,但不存在于 boost 中)。

此外,当我在 zlib.NET 中压缩的 boost 中解压缩数据时,我无法从流中读取,这表明有问题。当我尝试解压缩在 boost 中压缩的数据时,它确实有效。

有人知道哪里出了问题吗?

谢谢,

约翰

最佳答案

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

作为证据,考虑这个 Tcl session 的日志:

% 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 命令以“compress”格式展开数据,zlib inflate 命令以“raw deflated”格式展开数据。)

关于c# - boost::iostreams 中的 Zlib 压缩与 zlib.NET 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com