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
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
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire comme @LawfulEvil suggéré. Voici l'extrait de code qui fonctionne 🙂
À l'aide de cette comme le base64 encode/décode bibliothèque
Vous devriez vraiment la liste de l'article du code de l'exhaustivité.
OriginalL'auteur Zangetsu
Compression fait usage de toutes les valeurs disponibles pour chaque octet, de sorte qu'il apparaît comme "poubelle" ou "bizarre" caractères lorsque vous tentez d'afficher au format ascii. Ses attendus. Vous aurez besoin d'encoder les données pour la transmission /json emballage pour éviter les valeurs null. Je suggère en base 64. Le Code est disponible sur le lien ci-dessous(que je n'ai pas l'auteur donc je ne vais pas copier ici).
OriginalL'auteur LawfulEvil