Algo conversion fiichier en hexadécimal

developvbdebut Messages postés 476 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 2 juin 2012 - 10 janv. 2008 à 21:22
developvbdebut Messages postés 476 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 2 juin 2012 - 15 janv. 2008 à 22:18
Bonsoir

Je cherche un algo pour convertir des fichiers en Hexadécimal.

J'ai cherché sur le web, mai je n'ai pas trouvé.

Pouvez vous m'aider?

Merci.

Bonne Année 2008.

A +

15 réponses

Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
10 janv. 2008 à 22:15
Salut,
Un exemple:

DWORD __stdcall ConvertFile2Hex(LPSTR InFile, LPSTR OutFile)
{
static const BYTE HexaTable[16] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66 };
HANDLE hInFile, hOutFile;
BYTE* Buffer, *InBuff, *OutBuff;
DWORD i, br, bw, btw = 0;
hInFile = CreateFile(InFile, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if(hInFile == INVALID_HANDLE_VALUE) return 0;
hOutFile = CreateFile(OutFile, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if(hOutFile == INVALID_HANDLE_VALUE) goto Error;
Buffer = (BYTE*) HeapAlloc(GetProcessHeap(), HEAP_NO_SERIALIZE, 0x300000); // 3 mo
if(!Buffer) goto Error;
InBuff = Buffer;
OutBuff = &InBuff[0x100000];
while(1)
{
if(!ReadFile(hInFile, Buffer, 0x100000, &br, 0)) goto Error;
if(!br) break;
i = 0;
while(1)
{
OutBuff[2*i] = HexaTable[(InBuff[i]>>4) & 0x0f];
OutBuff[2*i+1] = HexaTable[(InBuff[i]) & 0x0f];
if(i++ == br) break;
}
if(!WriteFile(hOutFile, OutBuff, (br*2), &bw, 0)) goto Error;
btw += bw;
}
Error:
if(Buffer) HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, Buffer);
if(hOutFile) CloseHandle(hOutFile);
if(hInFile) CloseHandle(hInFile);
return btw; // Retourne le nb d'octet ecrit
}

Neo_Fr
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 janv. 2008 à 22:32
Faudrait déjà savoir quesqu'il veut dire par : "convertir des fichiers en Hexadécimal"

while(1)

{

    ...
     if(i++ == br) break;

}

do while

Encore une fois, tes goto pourraient être très facilement évités et on supprimerait, en même temps, tout ces tests pour savoir si la mémoire est allouée ou si le fichier est ouvert. En plus, ceux qui sont dans la boucle sont complètements inutiles. break fera la même chose.

HEAP_NO_SERIALIZE
As tu lue MSDN sur ce flag ?
"This value should not be specified when accessing the process heap"
En plus, avec ce flag, tu limites l'utilisation de cette fonction à un seul thread.

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 janv. 2008 à 22:40
"on supprimerait, en même temps, tout ces tests pour savoir si la mémoire est allouée ou si le fichier est ouvert"

Je parle de ces tests:
if(Buffer) HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, Buffer);

if(hOutFile) CloseHandle(hOutFile);

if(hInFile) CloseHandle(hInFile);

C++ (@++)<!--
0
developvbdebut Messages postés 476 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 2 juin 2012 1
10 janv. 2008 à 22:51
Re bonsoir

Pardon, je me suis mal exprimer.

Je souhaite récupérer le code hexadécimal des fichiers images.

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
10 janv. 2008 à 22:53
Personnelement je trouve les goto pr la gestion des erreurs bien plus propre (et plus rapide a écrire) que des tas d'imbrications, pour HEAP_NO_SERIALIZE suffit juste l'enlever si ca doit etre utiliser ds plusieurs threads..

Neo_Fr
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
10 janv. 2008 à 22:53
Le code hexadecimal des fichiers image??

Neo_Fr
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 janv. 2008 à 22:53
Tout est déjà en hexadécimal (l'hexadécimal n'étant qu'une représentation "compacté" du binaire). Aucun besoin de convertir quoi que ce soit. Tu stock ton image dans un buffer de BYTE et tu effectues les traitements souhaité.

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 janv. 2008 à 22:55
On utilise généralement les goto pour optimiser son code or ici tu ne fais que rajouter des instructions. 3 if imbriqués ne sera pas plus compliqué à taper.

C++ (@++)<!--
0
developvbdebut Messages postés 476 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 2 juin 2012 1
10 janv. 2008 à 23:00
Re

Quel traitement  SAKingdom ?

Où puis je trouvé un tuto sur ce sujet?

Je veux récupérer le code hexa des images pour les utiliser dans une librairie graphique.

A+
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 janv. 2008 à 23:04
Les traitements que tu ou une librairie aura à faire peut-importe.

"Je veux récupérer le code hexa des images pour les utiliser dans une librairie graphique."

Pas clair encore une fois. Quesque tu veux dire ? Convertir ce que tu as extrais en une chaine de caractère contenant la représentation hexa (pour afficher lisiblement par exemple) ?
Car sinon, je le répète, tout est déjà en hexadécimal.

C++ (@++)<!--
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 janv. 2008 à 23:05
"le code hexa des images"
je n'y comprends rien, un exemple stp.

ciao...
BruNews, MVP VC++
0
developvbdebut Messages postés 476 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 2 juin 2012 1
11 janv. 2008 à 08:38
Bonjour tout le monde

Voici une image.

http://cjoint.com/?bliFLqzsos

Voici le code hexadécimale de l'image.

......................................

0x47,0x49,0x46,0x38,0x39,0x61,0x10,0x00,0x10,0x00,0xf2,0x00,0x00,0xb2,0xc0,0xdc,
  0x00,0x00,0x00,0xff,0xff,0xff,0xc0,0xc0,0xc0,0x80,0x80,0x80,0x00,0x80,0x80,0x00,
  0x00,0x00,0x00,0x00,0x00,0x21,0xf9,0x04,0x01,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,
  0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x03,0x49,0x08,0x0a,0xd1,0xbd,0x10,0x06,0x41,
  0x5f,0x94,0x62,0xea,0xbb,0x66,0x75,0x1c,0x93,0x09,0x43,0x19,0x84,0x1e,0x55,0x5d,
  0x8e,0x40,0x04,0x6f,0x66,0x29,0x41,0x91,0xaa,0xf5,0x49,0x3b,0x7c,0x7f,0x06,0x25,
  0x92,0x70,0x30,0x24,0x35,0x0a,0xc8,0xa4,0x52,0x79,0xb4,0x39,0x99,0x35,0x5b,0x74,
  0x49,0x95,0xfa,0xae,0x8f,0x1a,0xa1,0xb0,0xed,0x72,0xb9,0xba,0x17,0xd6,0x41,0x00,
  0x24,0x00,0x00,0x3b

.....................

La librairie que j'utilise n'affiche pas les images à partir d'un url mai à partir du code hexadecimal.

je souhaite créer mes propre images, je veux récupérer leur code hexadecimale.

Avez vous compris?

A +
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
11 janv. 2008 à 17:14
T'est sur de toi la?
Tu utilise quoi comme librairie?
Poste le code d'ou sont extrait ces valeurs.

Neo_Fr
0
developvbdebut Messages postés 476 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 2 juin 2012 1
12 janv. 2008 à 20:38
Bonsoir

Ma question est simple.

Comment récupérer le code hexadecimal d'une image.

A +
0
developvbdebut Messages postés 476 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 2 juin 2012 1
15 janv. 2008 à 22:18
Bonsoir

Personne ne peut m'aider?

A+
0
Rejoignez-nous