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 :
J'ai plusieurs problèmes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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
Partager