Ecrire un fichier directement en hexadécimal

Signaler
Messages postés
2
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
11 novembre 2007
-
Messages postés
2
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
11 novembre 2007
-
Bonjour,

Après m'être récemment interrogé sur la manière dont l'on pouvait créer un fichier bitmap, et avoir étudié leur structure hexadécimale, j'en suis arrivé à la question: "mais comment écrit-on un fichier en hexadécimal à la base?".

J'ai donc cherché un peu partout avec google sur la manière d'écrire un fichier en hexa, mais je me suis vite rendu qu'absolument toutes les fonctions que je trouvais faisaient intervenir une chaine de caractères comme argument, chaine qui serait ensuite écrite dans le fichier. Le mystère reste donc entier pour moi, c'est pourquoi je suis venu ici dans l'espoir que quelqu'un pourrait éclairer ma lanterne.

Pour expliciter ce que je voudrais pouvoir faire:

J'aimerais pouvoir écrire par exemple "a5" dans un fichier, et en ouvrant ce fichier avec un éditeur hexadecimale voir exactement a5, et pas la convertion hexadécimale de la chaine de caractères "a5" qui se traduirait par 61 35 ou quelque chose du genre.

Merci d'avance.

3 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Normal de ne pas comprendre si on se demande comment franchir l'échelon 5 avant d'avoir passé le 2.

Un fichier "hexa" serait un fichier texte, l'hexa n'étant qu'une représentation de ce qui est vraiment et toujours en interne, DU BINAIRE.

ciao...
BruNews, MVP VC++
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Salut,
Utilise cette fonction ca devrait marcher:

DWORD __stdcall Write2Hex(char* FilePath, char* szData)
{
static const BYTE Table[16] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65 , 0x66};
HANDLE hFile;
BYTE* Buffer;
DWORD DataLen 0, i 0, bw = 0;
DataLen = strlen(szData);
if(!DataLen) goto Error;
hFile = CreateFile(FilePath, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if(hFile == INVALID_HANDLE_VALUE) goto Error;
Buffer = (BYTE*) HeapAlloc(GetProcessHeap(), HEAP_NO_SERIALIZE|HEAP_ZERO_MEMORY, (DataLen*2)+1);
if(!Buffer) goto Error;
while(1)
{
Buffer[2*i] = Table[(szData[i]>>4) & 0x0f];
Buffer[2*i+1] = Table[(szData[i]) & 0x0f];
if(i == DataLen) break;
i++;
}
if(!WriteFile(hFile, Buffer, (DataLen*2), &bw, 0)) goto Error;
Error:
if(hFile) CloseHandle(hFile);
if(Buffer) HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, Buffer);
return bw;
}

Neo_Fr
Messages postés
2
Date d'inscription
vendredi 13 octobre 2006
Statut
Membre
Dernière intervention
11 novembre 2007

@[auteur/BRUNEWS/39449.aspx BruNews]

Désolé de l'imprecision, effectivement quand je dis vouloir écrire en "hexa" j'ai pleinement conscience que cela revient à écrire directement le fichier en binaire, le passage de l'un à l'autre n'étant pas bien compliqué.

@[auteur/NEOFR/639176.aspx Neo_Fr]

Merci pour la fonction, je vais la décortiquer pour comprendre morceau par morceau comment elle fonctionne.