gpt4 book ai didi

c++ - Boost Zlib的解压缩在Windows上崩溃

转载 作者:行者123 更新时间:2023-12-02 10:34:40 25 4
gpt4 key购买 nike

我已经在Linux上成功使用了以下代码,但是在boost::iostreams::copy()上的Windows上崩溃了。可能是什么原因?

#include <sstream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>

// https://stackoverflow.com/a/17176881/3764804
bool is_compressed(const std::string &data) {
return data.at(0) == 0x78 && (unsigned char) data.at(1) == 0xDA;
}

std::string compress(const std::string &plain_text) {
boost::iostreams::filtering_streambuf<boost::iostreams::output> output_stream;
const auto compression_level = boost::iostreams::zlib::best_compression;
output_stream.push(boost::iostreams::zlib_compressor(compression_level));
std::stringstream string_stream;
output_stream.push(string_stream);
boost::iostreams::copy(boost::iostreams::basic_array_source<char>(plain_text.c_str(),
plain_text.size()), output_stream);
return string_stream.str();
}

std::string decompress(const std::string &cipher_text) {
std::stringstream string_stream;
string_stream << cipher_text;
boost::iostreams::filtering_streambuf<boost::iostreams::input> input_stream;
input_stream.push(boost::iostreams::zlib_decompressor());

input_stream.push(string_stream);
std::stringstream unpacked_text;
boost::iostreams::copy(input_stream, unpacked_text); // <-- Crashes here on Windows
return unpacked_text.str();
}

异常(exception):
Exception thrown at 0x00007FFF08A8A859 in my_project.exe: Microsoft C++ exception: boost::wrapexcept<boost::iostreams::zlib_error> at memory location 0x00000015E14FD440.
Exception thrown at 0x00007FFF08A8A859 in my_project.exe: Microsoft C++ exception: [rethrow] at memory location 0x0000000000000000.

我的Boost是 1.72.0版本。

我尝试在主函数的顶部调用一个简单的压缩/解压缩示例,并且该示例有效。但是,当使用更大的压缩缓冲区时,它仍然会以相同的方式崩溃。

This answer不适用于我,因为我正在写 std::stringstream而不是输出文件。

最佳答案

几天后,我发现Windows行分隔符0D 0A写入了zlib压缩文件中,而不仅仅是0A上的Linux。这出乎意料地导致减压崩溃。一个简单的解决方法是用0D 0A替换所有0A序列。参见this问题。不过,我不知道为什么需要这种“hack”。也许还有一种更优雅的方式?也许我的解决方案甚至都不是傻瓜。随时发布另一个答案。

关于c++ - Boost Zlib的解压缩在Windows上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60915861/

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