bonjour
je voulais extraire les données binaires (en hexa) d'un fichier .jpg!
j'ai bien commencé mais lorsque je veux delete le tableau de char** j'ai un message d'erreur
Nom : Capturer.JPG
Affichages : 590
Taille : 32,9 Ko
voici mon code,
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
 
#include <string>
#include <bitset> // pour pouvoir utiliser la classe ... bitset
#include <limits.h> // pour pouvoir disposer de la constante CHAR_BIT
#include <iostream> // pour pouvoir disposer de cout
#include <fstream> // pour pouvoir disposer de... ifstream
#include<cstdio>
using namespace std;
 
int main (void)
{
	std::ifstream ifs3("G:\\Documents\\Pictures\\2010 TEST\\0004.jpg",std::ios::binary);
	  if (!ifs3.is_open())
		cout << "Impossible d'ouvrir le fichier en lecture !" << endl;
	  else
	  {
		// sauvegarder la position courante
				 long pos=ifs3.tellg();
				 cout<<pos<<endl;
		// se placer en fin de fichier
				 ifs3.seekg(0,std::ios_base::end);
		// récupérer la nouvelle position = la taille du fichier
				 long size=ifs3.tellg();
				 cout<<dec<<size<<endl;
		// restaurer la position initiale du fichier
				 ifs3.seekg(pos,std::ios_base::beg);
		char **tfs3;
		tfs3=new char*[size];
		char ctmpfs3;
		  int i=0;
		  int j=0;
		  int n=0;
		  int a=0;
 
		for( i=0; i<((size+1)/4); ++i)
		{
			cout<<endl<<n<<"  ";
 
			tfs3[i]=new char[3];
			for( j=0; j<4; ++j)
			{
				ifs3.read(&ctmpfs3,1);
				tfs3[i][j]=ctmpfs3;
				//cout<<tfs3[n][j];
				// pour l'affichage binaire, nous passons par un bitset 
				std::bitset<CHAR_BIT> bsfs3(ctmpfs3);
			   // std::cout<<uppercase<<"binaire : "<<bs<< "   ";//uppercase  affiche en majuscule
				// affichage du charactère 
			   // std::cout<<" char <<"<<d<< "<<   ";
				// pour provoquer l'affichage sous forme hexadécimale 
				 a=bsfs3.to_ulong();
				std::cout<<" "<<std::hex<<a;//(int)d;
				/* pour provoquer l'affichage sous la forme décimale */
				//std::cout<<" decimal : "<<dec<<a<<std::endl<<endl<<endl;
			}
			n=n+4;
		}  
		ifs3.close();
		// si fichier JPEG Tous les fichiers JPEG commencent par la valeur hexadécimale '0xFFD8' signifie SOI (Start Of Image)
			 std::bitset<CHAR_BIT> bsfs3(tfs3[0][0]);
			if (bsfs3==0xFF)
			{
				std::bitset<CHAR_BIT> bsfs3(tfs3[0][1]);
				if(bsfs3==0xD8)
					cout<<" Jpeg "<<endl;
			}
//plus besoin du tableau
		// D'abord on libère le contenu du tableau
		for( i=0; i<(size/4); ++i)
		{
			delete[](tfs3[i]);
		}
		// Puis on libère le tableau
		delete[] tfs3;
	  }
}
la partie qui provoque l'erreur est tout à la fin, après plus besoin du tableau!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
//plus besoin du tableau
		// D'abord on libère le contenu du tableau
		for( i=0; i<(size/4); ++i)
		{
			delete[](tfs3[i]);
		}
		// Puis on libère le tableau
		delete[] tfs3;
même pour le reste j'accepte toutes critiques ou autres méthodes