J'ai une chaîne (d'une certaine longueur fixe), que j'ai besoin de compresser et de comparer ensuite les longueurs compressées (comme un proxy pour la redondance dans les données ou comme une approximation de la complexité de Kolmogorov). Actuellement, j'utilise boost :: iostreams pour la compression, ce qui semble bien fonctionner. Cependant, je ne sais pas comment obtenir la taille des données compressées. Quelqu'un peut-il aider, s'il vous plaît?longueur compressée d'une chaîne par boost :: iostreams
L'extrait de code est
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/gzip.hpp>
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/filesystem.hpp>
#include <string>
#include <sstream>
namespace io = boost::iostreams;
int main() {
std::string memblock;
std::cout << "Input the string to be compressed:";
std::cin >> memblock;
std::cout << memblock << std::endl;
io::filtering_ostream out;
out.push(io::gzip_compressor());
out.push(io::file_descriptor_sink("test.gz"));
out.write (memblock.c_str(), memblock.size());
std::cout << out.size() << std::endl;
return 0;
}
Pouvez-vous écrire les données à un objet semblable à stringstream? Si c'est le cas, il est trivial d'obtenir le résultat sous forme de chaîne et d'obtenir sa longueur. –