Simple Zlib C++ Chaîne de Compression et de Décompression

J'ai besoin d'une simple compression et la décompression d'un std::string en C++. J'ai regardé ce site et le code pour tableau de Caractères. Ce que je veux mettre en œuvre sont les deux fonctions:

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;

J'avais essayé le coup de pouce de compression:

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();
}

mais le code donne parfois des caractères Nuls dans la chaîne ie \u0000. Comment dois-je faire si la compression de données contient ces caractères null. Est le type de retour chaîne correct? Comment puis-je mettre en œuvre la fonction string_compress et string_decompress avec zlib?

Données compressées est juste des données binaires. Il n'est pas raisonnable, lisible à la chaîne (dans le sens humain). Il n'est donc pas surprenant que vous voyez "bizarre" des données binaires dans le comprimé de la chaîne. C'est, après tout, exactement ce que c'est.
Pourquoi vous vous souciez si il ya des caractères nuls dans le comprimé de la chaîne?
Parce que le comprimé message est envoyé au Serveur en tant que chaîne Json. Mais le serveur ne peut pas recevoir le message complet une fois qu'il voit le caractère null.
Ensuite, vous devez encoder, que ce soit avec ou base64 autre chose. C'est ce que tout le monde le fait avec des données binaires en JSON.
Merci je vais lui donner un aller

OriginalL'auteur Pant | 2014-12-17