logo Homepage
+  NewbieContest
|-+  Programmation» Langages compilés» [delphi] Editeur hexadecimal
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: [delphi] Editeur hexadecimal  (Lu 5042 fois)
anarpunk
Profil challenge

Classement : 6739/54325

Néophyte
*
Hors ligne Hors ligne
Messages: 6


Voir le profil WWW
« le: 26 Mars 2006 à 13:46:13 »

Bonjour à tous,
je suis en train de programmer un editeur hexadecimal en delphi (bien que le langage n'a pas d'importance dans ma question) et je me demande un truc :
lorsqu'on ouvre un programme avec un editeur hexadecimal (ou meme avec le bloc-notes), la partie ASCII est principalement composée d'espaces (ou de points suivant les editeurs), en fait, ces espaces sont sensés correspondre aux "00 " en hexa. Or, le "00 " en hexadecimal ne correspond a aucun caractere, mais en plus il "annule" ce qu'il y a immediatement aprés. Ce qui fait que quand j'ouvre normalement mon programme dans un composant permettant d'afficher du texte ou que je traduit l'hexadecimal d'un programme, tous les espaces que l'on trouve dans les autres editeurs hexadecimaux sont absent, et donc la partie ASCII ne correspond plus a la partie hexadecimale. Ma question est donc, comment font les editeurs hexadecimaux pour afficher des points ou des espaces là où ils doivent etre ?
J'avais pensé a remplacer tous les "00 " de ma partie hexa en "20 " juste le temps de faire la "traduction" mais il doit sûrement y avoir une technique plus rapide...
Merci d'avance pour vos réponses, @ +
Journalisée
SeVeN
Relecteur

Profil challenge

Classement : 45/54325

Membre Senior
*
Hors ligne Hors ligne
Messages: 286


Voir le profil
« #1 le: 26 Mars 2006 à 17:28:05 »

00 ne correspond pas un espace, comme tu l'as dis c'est bien 0x20 l'espace. Pour l'affichage dans la partie ascii on met un espace mais c'est pour mettre quelque chose, ca ne veut pas dire que 00 correspond a un espace.

http://www.lookuptables.com/
Journalisée

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d- s+:- a-- C+++ UL++ P++ L++ E W++ N+ o-- K- w++
O-- M V- PS+ PE++ Y+ PGP t 5 X++ R+ tv-- b+ DI D+
G e- h+ r- y+
------END GEEK CODE BLOCK------
anarpunk
Profil challenge

Classement : 6739/54325

Néophyte
*
Hors ligne Hors ligne
Messages: 6


Voir le profil WWW
« #2 le: 27 Mars 2006 à 10:46:01 »

C'est exactement ce que j'ai dis 00 ne correspond effectivement pas a un espace. Bon, hier, j'ai appliqué la technique que j'avais dis a savoir convertir tous les "00 " en "2E " (".") directement dans la variable, ce qui fait que dans la partie hexadecimale, il n'y a pas ces "2E ". Par contre, il reste quelques endroits où j'ai encore le probleme car il n'y a pas que 00 qui ne corresponde a rien...
@ +, si vous avez d'autres techniques, chui toujours preneur
Journalisée
SeVeN
Relecteur

Profil challenge

Classement : 45/54325

Membre Senior
*
Hors ligne Hors ligne
Messages: 286


Voir le profil
« #3 le: 27 Mars 2006 à 12:04:47 »

00 ne correspond pas a rien hein, ca a une utilite T'as ete voir le site pour avoir les correspondances ?
Tout ce qui n'est pas affichables en ascii (on va dire < 0x20 et > a 0x7E) tu peux le remplacer comme tu dis par des espaces, mais uniquement dans l'affichage de la partie ascii, surtout pas dans le fichier en lui meme ni dans l'affichage de la partie hexa.
Journalisée

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d- s+:- a-- C+++ UL++ P++ L++ E W++ N+ o-- K- w++
O-- M V- PS+ PE++ Y+ PGP t 5 X++ R+ tv-- b+ DI D+
G e- h+ r- y+
------END GEEK CODE BLOCK------
anarpunk
Profil challenge

Classement : 6739/54325

Néophyte
*
Hors ligne Hors ligne
Messages: 6


Voir le profil WWW
« #4 le: 27 Mars 2006 à 13:51:05 »

Oué ça je sais, on s'en rend d'ailleurs compte quand on ouvre le fichier normalement en delphi ^^. Et désolé de m'etre mal exprimé lol je sais bien que 00 correspond tout de meme a quelque chose ^^. Et donc d'aprés toi, les editeurs hexadecimaux font comme le mien, c'est-a-dire qu'ils remplacent tous les équivalents de 00 par des espaces ou des points en recherchant ceux-ci ?
@ + et merci de porter de l'attention a ma question
Journalisée
Nebelmann

Profil challenge

Classement : 464/54325

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1357


Voir le profil
« #5 le: 27 Mars 2006 à 18:19:36 »

seulement dans la partie ASCII, dans la partie hexa rien n'est modifié
Journalisée

-- Nebelmann -- Registered linux user #429186
«Si les lecteurs étaient des compilateurs, les posteurs feraient peut-être davantage attention à ce qu'ils écrivent...»
Invit
Invité
« #6 le: 28 Mars 2006 à 01:45:55 »

De manière générale il faut, à l'affichage, remplacer tous les caractères de contrôles par un 2Eh ou un 20h, à savoir tout ce qui est strictement inférieur à 32 dans la table ASCII
C'est simple en fait, tu affiches au maximum un millier de caractères par page à chaque fois, je suppose que t'as un buffer prévu (ou même une lecture directe, peu importe mais bon...) pour chaque octet tu peux bien te permettre de coller une instruction conditionnelle ça mangera pas beaucoups plus de cycles...
Journalisée
anarpunk
Profil challenge

Classement : 6739/54325

Néophyte
*
Hors ligne Hors ligne
Messages: 6


Voir le profil WWW
« #7 le: 28 Mars 2006 à 13:40:59 »

Ben en fait il va falloir que je modifie completement le morceau de code qui gere l'ASCII parceque pour l'instant, je traduit directement a partir de ma variable qui contient les ligne en hexa... Je ne peux donc pas faire de condition... Enfin je crois, je vais vérifier...
@ +
Journalisée
anarpunk
Profil challenge

Classement : 6739/54325

Néophyte
*
Hors ligne Hors ligne
Messages: 6


Voir le profil WWW
« #8 le: 01 Avril 2006 à 13:29:40 »

Salut a tous, en fait j'ai réussis a faire ce que je voulais sans trop faire de changements. Pour ceux que ça interresse, mon editeur hexadecimal, ainsi que ces sources, seront en libre téléchargement sur ce site :
www.website.bluesourcesproject.info
Journalisée
Pages: [1]
  Imprimer  
 
Aller à: