Ho bisogno di una semplice compressione e decompressione di una stringa std :: in C++. Ho guardato questo site e il codice è per Array di caratteri. Quello che voglio implementare sono le due funzioni:Compressione e decompressione stringa semplice Zlib C++
std::string original = "This is to be compressed!!!!";
std::string compressed = string_compress(original);
std::cout << compressed << std::endl;
std::string decompressed = string_decompress(compressed);
std::cout << decompressed << std::endl;
avevo provato la compressione spinta come:
std::string CompressData(const std::string &data)
{
std::stringstream compressed;
std::stringstream decompressed;
decompressed << data;
boost::iostreams::filtering_streambuf<boost::iostreams::input> out;
out.push(boost::iostreams::zlib_compressor());
out.push(decompressed);
boost::iostreams::copy(out, compressed);
return compressed.str();
}
std::string DecompressData(const std::string &data)
{
std::stringstream compressed;
std::stringstream decompressed;
compressed << data;
boost::iostreams::filtering_streambuf<boost::iostreams::input> in;
in.push(boost::iostreams::zlib_decompressor());
in.push(compressed);
boost::iostreams::copy(in, decompressed);
return decompressed.str();
}
ma il codice a volte dà caratteri Null in stringa cioè \ u0000. Come gestisco se i dati compressi contengono questi caratteri nulli. Il tipo di ritorno stringa è corretto? Come posso implementare la funzione string_compress e string_decompress utilizzando zlib?
dati compressa è solo dati binari. Non è una stringa sensata e leggibile (nel senso umano). Quindi non sorprende che si vedano dati binari "strani" nella stringa compressa. Dopotutto, esattamente quello che è. – Cornstalks
Perché ti importa se nella stringa compressa ci sono caratteri null? – Galik
Poiché il messaggio compresso viene inviato al server come stringa Json. Ma il server non può ricevere il messaggio completo una volta che vede il carattere null. – Pant