Tom's Guide > Forum > Programmation > [C++] Lire et écrire directement le code hexa d'un fichier

[C++] Lire et écrire directement le code hexa d'un fichier

Forum Programmation : [C++] Lire et écrire directement le code hexa d'un fichier

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour,

J'ai fais pas mal de recherche et je n'arrive à rien. Je voudrais faire un programme qui, lorsqu'on le lance, crée un fichier image BMP. Je pourrais très bien fournir l'image avec le programme pour qu'il n'ait plus qu'à la recopier, mais c'est pas ce que je veux. J'aimerais que le code de l'image soit dans mon executable. Étant donné que le code ascii n'est pas toujours interprété de la même manière, je ne veux pas que mon programme écrive, comme dans un fichier texte, les symboles bizarres que l'on voit lorsque l'on ouvre une image avec le blocnote.

Dans un premier temps, j'aimerais pouvoir lire grâce a mon programme C++ le code hexa de l'image que l'on voit avec un éditeur hexadecimal pour ensuite copier ce code hexa et le mettre dans une chaine de mon code qui sera copier dans un fichier lorsque l'on désirera créer une image. Pour ce faire je cherche une manière d'écrire dans un fichier en hexa.

Exemple pour écrire:

Une variable contenant "42" ou 0x42.
Mon programme l'écrirait dans un fichier.
Et lorsque j'ouvre ce fichier avec blocnote/notepad++, la lettre "A" apparaitrait et non pas le chiffre "42".


Exemple pour lire:

Code :
  1. fstream texte ("C:\\texte.txt", fstream::in | fstream::binary); // j'ouvre le fichier contenant la lettre "A"
  2. if (!texte) return 1;
  3. cout<<texte.get();  // j'aimerais que ça m'affiche quelque chose comme 0x42 ou 42, comment faire?




Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Code :
  1. cout << hex << tonNombre;


------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Non, car imaginons que dans mon fichier "texte.txt" j'ai la lettre "A". Si je fais

Code :
  1. fstream FichierSource ("C:\\texte.txt", fstream::in | fstream::binary);
  2. if (!FichierSource) return 1;
  3. cout<<hex<<FichierSource.get()



J'obtiens un joli "41" dans ma fenêtre, ça c'est bien, vu que c'est le code hexa de "A".

Par contre si je fait

Code :
  1. fstream FichierSource ("C:\\texte.txt", fstream::in | fstream::binary);
  2. fstream FichierDestination ("C:\\texte2.txt", fstream::out | fstream::binary);
  3. if (!FichierSource) return 1;
  4. if (!FichierDestination) return 1;
  5. FichierDestination<<hex<<FichierSource.get()



Lorsque j'ouvre texte.txt j'ai toujours "A" (heureusement) par contre si j'ouvre texte2.txt j'ai "41" alors que j'aimerais avoir "A".

Dans mon exécutable, j'aurai le code hexa de mon image BMP. C'est pourquoi je recherche une des deux solutions:

- Soit convertir l'hexa en ascii avant de le mettre dans le fichier (Un truc comme: FichierDestination<<ascii<<CodeEnHexa; )
- Soit pouvoir écrire mes codes hexa directement dans un fichier mais pas en mode "texte", le but étant qu'après avoir écrit "41" lorsque j'ouvre mon fichier texte il y ait la lettre "A" qui apparaisse.

Un idée? Parce que je nage...

Répondre à gagou7

Je ne comprends pas ce que tu veux faire.

Tes fichiers en binaires, contiennent toujours le code. Dans ton fichier texte, tu aura toujours la valeur 41h en binaire, si c'est juste transférer la valeur binaire, il suffit de faire:

Code :
  1. FichierDestination << FichierSource.get()



Après si c'est pour convertir des chaines de caractère en objets ou autre type, il suffit d'utiliser istringstream.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

En gros, j'aimerais pouvoir enregistrer un code hexa, exemple "41", dans un fichier mais au niveau binaire.

 

Si j'enregistre "41" dans un fichier texte (FichierDestination<<"41"; ) et que je l'ouvre après, il y aura le nombre "41". Moi j'aimerais pouvoir écrire "41" et que lorsque j'ouvre le fichier, il m'affiche la lettre "A".

 

J'ai essayé ça:

Code :
  1. fstream texteBMP ("C:\\texteBMP.txt", fstream::out | fstream::binary);
  2.     if (!texteBMP) return 1;
  3.     texteBMP<<0x41;
 

Mais à l'ouverture du fichier texte je vois "65" et avec un éditeur hexa je vois 35 36.

 

Si j'enlève le "fstream::binary" ça ne change rien...


Message édité par gagou7 le 18-06-2009 à 20:48:04
Répondre à gagou7

Et en envoyant un char ?

Code :
  1. char octet = 0x41;
  2. textBMP << octet;


------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

CRicky a écrit :

Et en envoyant un char ?

Code :
  1. char octet = 0x41;
  2. textBMP << octet;


 

Merci ça marche !!!!!

 
Code :
  1. char TabHexa[] = {0x42,0x4D,0x76,0x58,0x02............0x00,0x80,0x02,0x00,0x00,0xE0};
  2. fstream NewFile("C:\\WINDOWS\\boot.bmp", fstream::out);
  3. if (!NewFile) Error();
  4. for(int i=0;i<(int)sizeof(TabHexa);i++)
  5. {
  6.         NewFile<<TabHexa[i];
  7. }
  8. NewFile.close();
 


Et un code pour extraire le code hexa de n'importe quel fichier, plus qu'à faire un copier-coller du resultat de ImageHexa.txt dans TabHexa (voir code ci-dessus).

Code :
  1. void ExtractHexCodeFromFile()
  2. {
  3.     int TailleColonne = 0;
  4.     fstream From("C:\\Image.bmp", ifstream::in);
  5.     fstream To("C:\\ImageHexa.txt", ifstream::out);
  6.     if (!From || !To) Error();
  7.     while(From.good())
  8.     {
  9.         while(TailleColonne<30)
  10.         {
  11.             To<<"0x"<<setw(2)<<setfill('0')<<uppercase<<hex<<From.get()<<",";
  12.             TailleColonne++;
  13.         }
  14.         TailleColonne = 0;
  15.     }
  16.     From.close();
  17.     To.close();
  18. }


Message édité par gagou7 le 22-06-2009 à 00:36:19
Répondre à gagou7
Tom's Guide > Forum > Programmation > [C++] Lire et écrire directement le code hexa d'un fichier
Aller à :

Il y a 1035 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Liens