Simple Zlib C++ String Compression and Decompression

前端 未结 2 582
耶瑟儿~
耶瑟儿~ 2020-12-31 20:48

I need a simple compression and decompression of a std::string in C++. I looked at this site and the code is for Character array. What I want to implement are the two functi

2条回答
  •  感动是毒
    2020-12-31 21:26

    You can do as @LawfulEvil suggested. Here is the code snippet that works :)

    std::string original = "This is to be compressed!!!!";
    std::string compressed_encoded = string_compress_encode(original);
    std::cout << compressed_encoded << std::endl;
    std::string decompressed_decoded = string_decompress_decode(compressed_encoded);
    std::cout << decompressed_decoded << std::endl;
    

    Using this as the base64 encode/decode library.

    #include 
    #include 
    #include 
    #include 
    #include 
    
    std::string string_compress_encode(const std::string &data)
    {
        std::stringstream compressed;
        std::stringstream original;
        original << data;
        boost::iostreams::filtering_streambuf out;
        out.push(boost::iostreams::zlib_compressor());
        out.push(original);
        boost::iostreams::copy(out, compressed);
    
        /**need to encode here **/
        std::string compressed_encoded = base64_encode(reinterpret_cast(compressed.c_str()), compressed.length());
    
        return compressed_encoded;
    }
    
    std::string string_decompress_decode(const std::string &data)
    {
        std::stringstream compressed_encoded;
        std::stringstream decompressed;
        compressed_encoded << data;
    
        /** first decode  then decompress **/
        std::string compressed = base64_decode(compressed_encoded);
    
        boost::iostreams::filtering_streambuf in;
        in.push(boost::iostreams::zlib_decompressor());
        in.push(compressed);
        boost::iostreams::copy(in, decompressed);
        return decompressed.str();
    }
    

提交回复
热议问题