decompression partie de fichier binaire
Bonjour,
J'ai un fichier binaire constitué d'un header de 11 octets suivi d'un bloc de donnéees compressé en gz qui fait une centaine de Ko
Je veux charger le fichier, separer l'entete et decompresser le buffer de valeurs qui sont encodées sur un octet signé.
Je dois recuperer une suite de int de 730 par 730 valeurs
Etant debutant en C++ , pour l'instant je fais la chose suivante en m'inspirant de divers exemples :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
#include <iostream>
#include <string>
#include <fstream>
#include <zlib.h>
#include <vector>
using std::ios;
using std::cout;
using std::endl;
using std::string;
using std::ifstream;
using namespace std;
int main()
{
std::string filein= "Divers/modeles/1_-2_47.deg";
std::string fileout="Divers/modeles/1_-2_47out.deg";
ifstream fluxentree(filein.c_str(),ios::in | ios::binary);
ofstream fluxsortie(fileout.c_str(),ios::out | ios::binary);
const int N=11 ; //nombre d'octets à supprimer en-tête
if (fluxentree.fail()) { cout << "erreur fichier "<<endl; return 1;}
fluxentree.seekg(N+1, ios::beg); //décalage du pointeur de lecture
fluxsortie << fluxentree.rdbuf(); //ici la ligne de copie vers la sortie rdbuf retourne un pointeur
gzFile inFileZ = gzopen(fileout.c_str(), "rb");
if (inFileZ == NULL) { cout<<" Erreur";printf("Error: Failed to gzopen %s\n", fileout.c_str()); exit(0);}
else{ cout<<" Fichier ouvert \n";}
unsigned char unzipBuffer[8192];
unsigned int unzippedBytes;
std::vector<int> unzippedData;
while (true) {
unzippedBytes = gzread(inFileZ, unzipBuffer, 8192);
if (unzippedBytes > 0) {
unzippedData.insert(unzippedData.end(), unzipBuffer, unzipBuffer + unzippedBytes);
} else {
break;
}
}
gzclose(inFileZ);
cout<<"\n Resultat \n";
for (auto const valeur : unzippedData)
{std::cout << valeur << " "; }
return 0;
} |
J'ai plusieurs problèmes.
D'abord je passe par un fichier intermediaire fileout , ce qui n'est pas tres utile mais je n'arrive pas a utiliser correctement le Buffer, je pense que la solution est très simple mais je suis trop debutant !
Meme si j'arrive à compiler , la decompression ne marche visiblement pas, j'obtiens la meme sortie que pour le fichier compressé.
Merci de votre aide