IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Simple visualisateur hexadécimal


Sujet :

Free Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut Simple visualisateur hexadécimal
    Bonjour !

    Je cherchais le code d'un simple visualisateur hexadécimal en Pascal et finalement j'ai écrit ce petit programme. J'allais le poster dans les sources, mais tout compte fait je le poste ici, au cas où vous voudriez partager vos idées et éventuellement votre code autour de ce sujet.

    Pour une utilisation aisée du programme, faites glisser le fichier de votre choix sur hexdump.cmd. Je parle de la procédure sous Windows.

    Voici le résultat pour le fichier hexdump.pas :

    Code X : 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
    00000000 0D 0A 70 72 6F 67 72 61 6D 20 48 65 78 44 75 6D ..program.HexDum
    00000010 70 3B 0D 0A 7B 24 41 50 50 54 59 50 45 20 43 4F p;..{$APPTYPE.CO
    00000020 4E 53 4F 4C 45 7D 0D 0A 0D 0A 75 73 65 73 0D 0A NSOLE}....uses..
    00000030 20 20 53 79 73 55 74 69 6C 73 3B 0D 0A 0D 0A 66 ..SysUtils;....f
    00000040 75 6E 63 74 69 6F 6E 20 49 49 66 28 63 6F 6E 73 unction.IIf(cons
    00000050 74 20 61 43 6F 6E 64 69 74 69 6F 6E 3A 20 62 6F t.aCondition:.bo
    00000060 6F 6C 65 61 6E 3B 20 63 6F 6E 73 74 20 61 54 72 olean;.const.aTr
    00000070 75 65 52 65 73 75 6C 74 2C 20 61 46 61 6C 73 65 ueResult,.aFalse
    00000080 52 65 73 75 6C 74 3A 20 63 68 61 72 29 3A 20 63 Result:.char):.c
    00000090 68 61 72 3B 0D 0A 62 65 67 69 6E 0D 0A 20 20 69 har;..begin....i
    000000A0 66 20 61 43 6F 6E 64 69 74 69 6F 6E 20 74 68 65 f.aCondition.the
    000000B0 6E 20 72 65 73 75 6C 74 20 3A 3D 20 61 54 72 75 n.result.:=.aTru
    000000C0 65 52 65 73 75 6C 74 20 65 6C 73 65 20 72 65 73 eResult.else.res
    000000D0 75 6C 74 20 3A 3D 20 61 46 61 6C 73 65 52 65 73 ult.:=.aFalseRes
    000000E0 75 6C 74 3B 0D 0A 65 6E 64 3B 0D 0A 0D 0A 76 61 ult;..end;....va
    000000F0 72 0D 0A 20 20 62 75 66 66 65 72 3A 20 61 72 72 r....buffer:.arr
    00000100 61 79 5B 31 2E 2E 31 36 5D 20 6F 66 20 63 68 61 ay[1..16].of.cha
    00000110 72 3B 0D 0A 20 20 6F 66 66 73 65 74 3A 20 69 6E r;....offset:.in
    00000120 74 65 67 65 72 3B 0D 0A 0D 0A 70 72 6F 63 65 64 teger;....proced
    00000130 75 72 65 20 57 72 69 74 65 4C 69 6E 65 28 63 6F ure.WriteLine(co
    00000140 6E 73 74 20 61 43 68 61 72 43 6F 75 6E 74 3A 20 nst.aCharCount:.
    00000150 69 6E 74 65 67 65 72 29 3B 0D 0A 76 61 72 0D 0A integer);..var..
    00000160 20 20 69 3A 20 69 6E 74 65 67 65 72 3B 0D 0A 62 ..i:.integer;..b
    00000170 65 67 69 6E 0D 0A 20 20 57 72 69 74 65 28 46 6F egin....Write(Fo
    00000180 72 6D 61 74 28 27 25 30 2E 38 58 20 27 2C 20 5B rmat('%0.8X.',.[
    00000190 6F 66 66 73 65 74 5D 29 29 3B 0D 0A 20 20 66 6F offset]));....fo
    000001A0 72 20 69 20 3A 3D 20 31 20 74 6F 20 61 43 68 61 r.i.:=.1.to.aCha
    000001B0 72 43 6F 75 6E 74 20 64 6F 20 57 72 69 74 65 28 rCount.do.Write(
    000001C0 46 6F 72 6D 61 74 28 27 25 30 2E 32 58 20 27 2C Format('%0.2X.',
    000001D0 20 5B 4F 72 64 28 62 75 66 66 65 72 5B 69 5D 29 .[Ord(buffer[i])
    000001E0 5D 29 29 3B 0D 0A 20 20 57 72 69 74 65 28 53 74 ]));....Write(St
    000001F0 72 69 6E 67 4F 66 43 68 61 72 28 27 20 27 2C 20 ringOfChar('.',.
    00000200 33 20 2A 20 28 31 36 20 2D 20 61 43 68 61 72 43 3.*.(16.-.aCharC
    00000210 6F 75 6E 74 29 29 29 3B 0D 0A 20 20 66 6F 72 20 ount)));....for.
    00000220 69 20 3A 3D 20 31 20 74 6F 20 61 43 68 61 72 43 i.:=.1.to.aCharC
    00000230 6F 75 6E 74 20 64 6F 20 57 72 69 74 65 28 49 49 ount.do.Write(II
    00000240 66 28 62 75 66 66 65 72 5B 69 5D 20 69 6E 20 5B f(buffer[i].in.[
    00000250 23 33 33 2E 2E 23 31 32 36 5D 2C 20 62 75 66 66 #33..#126],.buff
    00000260 65 72 5B 69 5D 2C 20 27 2E 27 29 29 3B 0D 0A 20 er[i],.'.'));...
    00000270 20 57 72 69 74 65 4C 6E 3B 0D 0A 65 6E 64 3B 0D .WriteLn;..end;.
    00000280 0A 0D 0A 76 61 72 0D 0A 20 20 69 3A 20 69 6E 74 ...var....i:.int
    00000290 65 67 65 72 3B 0D 0A 0D 0A 62 65 67 69 6E 0D 0A eger;....begin..
    000002A0 20 20 69 20 3A 3D 20 31 3B 0D 0A 20 20 6F 66 66 ..i.:=.1;....off
    000002B0 73 65 74 20 3A 3D 20 30 3B 0D 0A 20 20 0D 0A 20 set.:=.0;.......
    000002C0 20 77 68 69 6C 65 20 6E 6F 74 20 45 6F 66 20 64 .while.not.Eof.d
    000002D0 6F 0D 0A 20 20 62 65 67 69 6E 0D 0A 20 20 20 20 o....begin......
    000002E0 52 65 61 64 28 62 75 66 66 65 72 5B 69 5D 29 3B Read(buffer[i]);
    000002F0 0D 0A 20 20 20 20 0D 0A 20 20 20 20 69 66 20 69 ............if.i
    00000300 20 3D 20 31 36 20 74 68 65 6E 0D 0A 20 20 20 20 .=.16.then......
    00000310 62 65 67 69 6E 0D 0A 20 20 20 20 20 20 57 72 69 begin........Wri
    00000320 74 65 4C 69 6E 65 28 69 29 3B 0D 0A 20 20 20 20 teLine(i);......
    00000330 20 20 69 20 3A 3D 20 31 3B 0D 0A 20 20 20 20 20 ..i.:=.1;.......
    00000340 20 49 6E 63 28 6F 66 66 73 65 74 2C 20 31 36 29 .Inc(offset,.16)
    00000350 3B 0D 0A 20 20 20 20 65 6E 64 20 65 6C 73 65 0D ;......end.else.
    00000360 0A 20 20 20 20 20 20 49 6E 63 28 69 29 3B 0D 0A .......Inc(i);..
    00000370 20 20 65 6E 64 3B 0D 0A 20 20 0D 0A 20 20 69 66 ..end;........if
    00000380 20 69 20 3E 20 31 20 74 68 65 6E 0D 0A 20 20 62 .i.>.1.then....b
    00000390 65 67 69 6E 0D 0A 20 20 20 20 44 65 63 28 69 29 egin......Dec(i)
    000003A0 3B 0D 0A 20 20 20 20 57 72 69 74 65 4C 69 6E 65 ;......WriteLine
    000003B0 28 69 29 3B 0D 0A 20 20 65 6E 64 3B 0D 0A 65 6E (i);....end;..en
    000003C0 64 2E 0D 0A                                     d...
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Salut,

    juste un tuyau/une remarque : les lignes de 16 octets étant assez pénibles à lire, perso quand j'ai réalisé un afficheur de ce type, j'ai fait en sorte d'avoir un peu d'espace entre les 8e et 9e octets, genre
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    00000000 0D 0A 70 72 6F 67 72 61  6D 20 48 65 78 44 75 6D ..program.HexDum
    00000010 70 3B 0D 0A 7B 24 41 50  50 54 59 50 45 20 43 4F p;..{$APPTYPE.CO
    Et si on veut pinailler, on peut dupliquer cet espace dans la zone de texte à droite
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Merci pour l'idée Jipété. C'est vrai que c'est plus lisible comme ça.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    La procédure modifiée :

    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
    procedure WriteLine(const aCharCount: integer);
    var
      i: integer;
      s: string;
    begin
      s := Format('%0.8X ', [offset]);
      for i := 1 to aCharCount do s := Concat(s, Format('%0.2X ', [Ord(buffer[i])]));
      s := Concat(s, StringOfChar(' ', 3 * (16 - aCharCount)));
      for i := 1 to aCharCount do s := Concat(s, IIf(buffer[i] in [#33..#126], buffer[i], '.'));
      Insert(' ', s, 10);
      Insert(' ', s, 35);
      Insert(' ', s, 60);
      Insert('  ', s, 69);
      WriteLn(s);
    end;
    Résultat :

    Code X : 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
    00000000  0D 0A 70 72 6F 67 72 61  6D 20 48 65 78 44 75 6D  ..progra  m.HexDum
    00000010  70 3B 0D 0A 7B 24 41 50  50 54 59 50 45 20 43 4F  p;..{$AP  PTYPE.CO
    00000020  4E 53 4F 4C 45 7D 0D 0A  0D 0A 75 73 65 73 0D 0A  NSOLE}..  ..uses..
    00000030  20 20 53 79 73 55 74 69  6C 73 3B 0D 0A 0D 0A 66  ..SysUti  ls;....f
    00000040  75 6E 63 74 69 6F 6E 20  49 49 66 28 63 6F 6E 73  unction.  IIf(cons
    00000050  74 20 61 43 6F 6E 64 69  74 69 6F 6E 3A 20 62 6F  t.aCondi  tion:.bo
    00000060  6F 6C 65 61 6E 3B 20 63  6F 6E 73 74 20 61 54 72  olean;.c  onst.aTr
    00000070  75 65 52 65 73 75 6C 74  2C 20 61 46 61 6C 73 65  ueResult  ,.aFalse
    00000080  52 65 73 75 6C 74 3A 20  63 68 61 72 29 3A 20 63  Result:.  char):.c
    00000090  68 61 72 3B 0D 0A 62 65  67 69 6E 0D 0A 20 20 69  har;..be  gin....i
    000000A0  66 20 61 43 6F 6E 64 69  74 69 6F 6E 20 74 68 65  f.aCondi  tion.the
    000000B0  6E 20 72 65 73 75 6C 74  20 3A 3D 20 61 54 72 75  n.result  .:=.aTru
    000000C0  65 52 65 73 75 6C 74 20  65 6C 73 65 20 72 65 73  eResult.  else.res
    000000D0  75 6C 74 20 3A 3D 20 61  46 61 6C 73 65 52 65 73  ult.:=.a  FalseRes
    000000E0  75 6C 74 3B 0D 0A 65 6E  64 3B 0D 0A 0D 0A 76 61  ult;..en  d;....va
    000000F0  72 0D 0A 20 20 62 75 66  66 65 72 3A 20 61 72 72  r....buf  fer:.arr
    00000100  61 79 5B 31 2E 2E 31 36  5D 20 6F 66 20 63 68 61  ay[1..16  ].of.cha
    00000110  72 3B 0D 0A 20 20 6F 66  66 73 65 74 3A 20 69 6E  r;....of  fset:.in
    00000120  74 65 67 65 72 3B 0D 0A  0D 0A 70 72 6F 63 65 64  teger;..  ..proced
    00000130  75 72 65 20 57 72 69 74  65 4C 69 6E 65 28 63 6F  ure.Writ  eLine(co
    00000140  6E 73 74 20 61 43 68 61  72 43 6F 75 6E 74 3A 20  nst.aCha  rCount:.
    00000150  69 6E 74 65 67 65 72 29  3B 0D 0A 76 61 72 0D 0A  integer)  ;..var..
    00000160  20 20 69 3A 20 69 6E 74  65 67 65 72 3B 0D 0A 20  ..i:.int  eger;...
    00000170  20 73 3A 20 73 74 72 69  6E 67 3B 0D 0A 62 65 67  .s:.stri  ng;..beg
    00000180  69 6E 0D 0A 20 20 73 20  3A 3D 20 46 6F 72 6D 61  in....s.  :=.Forma
    00000190  74 28 27 25 30 2E 38 58  20 27 2C 20 5B 6F 66 66  t('%0.8X  .',.[off
    000001A0  73 65 74 5D 29 3B 0D 0A  20 20 66 6F 72 20 69 20  set]);..  ..for.i.
    000001B0  3A 3D 20 31 20 74 6F 20  61 43 68 61 72 43 6F 75  :=.1.to.  aCharCou
    000001C0  6E 74 20 64 6F 20 73 20  3A 3D 20 43 6F 6E 63 61  nt.do.s.  :=.Conca
    000001D0  74 28 73 2C 20 46 6F 72  6D 61 74 28 27 25 30 2E  t(s,.For  mat('%0.
    000001E0  32 58 20 27 2C 20 5B 4F  72 64 28 62 75 66 66 65  2X.',.[O  rd(buffe
    000001F0  72 5B 69 5D 29 5D 29 29  3B 0D 0A 20 20 73 20 3A  r[i])]))  ;....s.:
    00000200  3D 20 43 6F 6E 63 61 74  28 73 2C 20 53 74 72 69  =.Concat  (s,.Stri
    00000210  6E 67 4F 66 43 68 61 72  28 27 20 27 2C 20 33 20  ngOfChar  ('.',.3.
    00000220  2A 20 28 31 36 20 2D 20  61 43 68 61 72 43 6F 75  *.(16.-.  aCharCou
    00000230  6E 74 29 29 29 3B 0D 0A  20 20 66 6F 72 20 69 20  nt)));..  ..for.i.
    00000240  3A 3D 20 31 20 74 6F 20  61 43 68 61 72 43 6F 75  :=.1.to.  aCharCou
    00000250  6E 74 20 64 6F 20 73 20  3A 3D 20 43 6F 6E 63 61  nt.do.s.  :=.Conca
    00000260  74 28 73 2C 20 49 49 66  28 62 75 66 66 65 72 5B  t(s,.IIf  (buffer[
    00000270  69 5D 20 69 6E 20 5B 23  33 33 2E 2E 23 31 32 36  i].in.[#  33..#126
    00000280  5D 2C 20 62 75 66 66 65  72 5B 69 5D 2C 20 27 2E  ],.buffe  r[i],.'.
    00000290  27 29 29 3B 0D 0A 20 20  49 6E 73 65 72 74 28 27  '));....  Insert('
    000002A0  20 27 2C 20 73 2C 20 31  30 29 3B 0D 0A 20 20 49  .',.s,.1  0);....I
    000002B0  6E 73 65 72 74 28 27 20  27 2C 20 73 2C 20 33 35  nsert('.  ',.s,.35
    000002C0  29 3B 0D 0A 20 20 49 6E  73 65 72 74 28 27 20 27  );....In  sert('.'
    000002D0  2C 20 73 2C 20 36 30 29  3B 0D 0A 20 20 49 6E 73  ,.s,.60)  ;....Ins
    000002E0  65 72 74 28 27 20 20 27  2C 20 73 2C 20 36 39 29  ert('..'  ,.s,.69)
    000002F0  3B 0D 0A 20 20 57 72 69  74 65 4C 6E 28 73 29 3B  ;....Wri  teLn(s);
    00000300  0D 0A 65 6E 64 3B 0D 0A  0D 0A 76 61 72 0D 0A 20  ..end;..  ..var...
    00000310  20 69 3A 20 69 6E 74 65  67 65 72 3B 0D 0A 0D 0A  .i:.inte  ger;....
    00000320  62 65 67 69 6E 0D 0A 20  20 69 20 3A 3D 20 31 3B  begin...  .i.:=.1;
    00000330  0D 0A 20 20 6F 66 66 73  65 74 20 3A 3D 20 30 3B  ....offs  et.:=.0;
    00000340  0D 0A 20 20 0D 0A 20 20  77 68 69 6C 65 20 6E 6F  ........  while.no
    00000350  74 20 45 6F 66 20 64 6F  0D 0A 20 20 62 65 67 69  t.Eof.do  ....begi
    00000360  6E 0D 0A 20 20 20 20 52  65 61 64 28 62 75 66 66  n......R  ead(buff
    00000370  65 72 5B 69 5D 29 3B 0D  0A 20 20 20 20 0D 0A 20  er[i]);.  ........
    00000380  20 20 20 69 66 20 69 20  3D 20 31 36 20 74 68 65  ...if.i.  =.16.the
    00000390  6E 0D 0A 20 20 20 20 62  65 67 69 6E 0D 0A 20 20  n......b  egin....
    000003A0  20 20 20 20 57 72 69 74  65 4C 69 6E 65 28 69 29  ....Writ  eLine(i)
    000003B0  3B 0D 0A 20 20 20 20 20  20 69 20 3A 3D 20 31 3B  ;.......  .i.:=.1;
    000003C0  0D 0A 20 20 20 20 20 20  49 6E 63 28 6F 66 66 73  ........  Inc(offs
    000003D0  65 74 2C 20 31 36 29 3B  0D 0A 20 20 20 20 65 6E  et,.16);  ......en
    000003E0  64 20 65 6C 73 65 0D 0A  20 20 20 20 20 20 49 6E  d.else..  ......In
    000003F0  63 28 69 29 3B 0D 0A 20  20 65 6E 64 3B 0D 0A 20  c(i);...  .end;...
    00000400  20 0D 0A 20 20 69 66 20  69 20 3E 20 31 20 74 68  .....if.  i.>.1.th
    00000410  65 6E 0D 0A 20 20 62 65  67 69 6E 0D 0A 20 20 20  en....be  gin.....
    00000420  20 44 65 63 28 69 29 3B  0D 0A 20 20 20 20 57 72  .Dec(i);  ......Wr
    00000430  69 74 65 4C 69 6E 65 28  69 29 3B 0D 0A 20 20 65  iteLine(  i);....e
    00000440  6E 64 3B 0D 0A 65 6E 64  2E 0D 0A                 nd;..end  ...
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Impec, comme d'habitude !

    Et s'il s'agit d'un fichier encodé en UTF-8 ? (vite, je sors en courant )
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Alcatîz Voir le message
    Impec, comme d'habitude !
    C'est gentil.

    Citation Envoyé par Alcatîz Voir le message
    Et s'il s'agit d'un fichier encodé en UTF-8 ? (vite, je sors en courant )
    Tu veux dire pour que les caractères s'affichent comme il faut dans les colonnes de droite ? Je vais y penser.

    J'ai fait l'expérience d'ouvrir un fichier contenant une cédille, des caractères cyrilliques et grecs dans l'éditeur XVI32 : il n'affiche pas les caractères correctement. Par contre j'ai observé que son filtre est moins strict que le mien.

    Mais c'est un programme dans une vraie fenêtre. Dans une console, c'est encore une autre affaire. Pour aller plus loin, il vaudrait mieux passer à une vraie fenêtre, je crois.

    Vos idées sont les bienvenues, pour pousser un peu plus loin la question, dans une direction ou dans une autre.

    P.-S. En ajoutant cette ligne dans hexdump.cmd,

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    chcp 65001
     
    :: Sortie console
    hexdump.exe < %1

    j'obtiens dans la console la cédille, les caractères cyrilliques, etc.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Si tu passes à une vraie fenêtre et si tu ajoutes la possibilité d'éditer, ça m'intéresse !
    Voilà un petit challenge
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Yop !

    Mon grain de sel :
    Citation Envoyé par Roland Chastain Voir le message
    Et s'il s'agit d'un fichier encodé en UTF-8 ? (vite, je sors en courant )
    Tu veux dire pour que les caractères s'affichent comme il faut dans les colonnes de droite ? Je vais y penser.
    Je ne crois pas que ce soit une bonne idée.

    Le but d'un afficheur hexa c'est d'afficher le contenu du fichier brut de fonderie sans aucune retouche, et l'affichage texte est juste une "facilité", si le machin se met à faire dans l'interprétation on ne s'en sortira pas !

    Un exemple tout bête :
    j'ai créé un fichier texte dans lequel j'ai saisi (sans les guillemets) "aà cç eé" donc 8 caractères, enfin, c'est ce que l'on voit avec le Bloc-notes et c'est que que mon doigt a fait : 8 appuis, sur [EDIT] 8 touches différentes 6 touches différentes + 2 fois ESPACE [/EDIT].
    Regardez la copie d'écran, au dessus de la fenêtre de l'éditeur hexa la partie intéressante de "Clic droit / Propriétés", qui nous révèle que le fichier pèse 11 octets alors que quelqu'un pas au courant aurait dit 8 :

    Nom : test_hexa.jpg
Affichages : 474
Taille : 46,3 Ko

    On reconnait bien les 2 caractères ESPACE (code 20) qui délimitent 3 groupes de 3 octets.

    Le challenge (et la prise de tête) serait de savoir comment afficher à droite ces fameux caractères multi-octets ?
    a.à c.ç e.é ? ou aàà cçç eéé ? Dans les deux cas c'est faux.

    En fait, il me semble que l'afficheur texte n'est qu'une facilité mise en place pour s'y retrouver, mais que les spécificités des caractères multi-octets sont incompatibles avec cette facilité.
    Quid des caractères sur 4 octets par exemple ?
    Non non, un afficheur hexa doit afficher de l'hexa, et dans l'absolu on pourrait (devrait ? En option ?) virer la fenêtre "texte".
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Merci pour vos encouragements et pour vos idées.

    @Jipété

    Ce que tu dis me paraît très juste. D'ailleurs le fichier peut même ne pas être un fichier texte, n'est-ce pas ? Je retiens aussi ton idée d'une option.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 133
    Points
    15 133
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    D'ailleurs le fichier peut même ne pas être un fichier texte, n'est-ce pas ?
    Tout à fait !
    On pourrait parfaitement avoir, sur un sacré coup de hasard, les octets C3 et A0 (caractère "à" dans cet encodage) à la suite quelque part dans un binaire, ces octets représentant par exemple les mots de commande et paramétrage d'une machine-outil branchée sur port parallèle, pourquoi pas.

    Parce qu'in fine, C3A0 c'est ni plus ni moins que 1100001110100000 et ça, selon que c'est une machine-outil ou un traitement de texte (= machine-outil spécialisée pour travailler du texte, des mots, etc., sous le contrôle d'un opérateur [oui, je pousse le bouchon loin ]), ça sera vu comme une suite de bits ou comme "à". Et ça c'est une interprétation, et àmha un éditeur hexa ne doit surtout rien interpréter.
    Sinon il outrepasse ses droits, son domaine de compétence.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Membre averti
    Avatar de joreveur
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 293
    Points : 365
    Points
    365
    Par défaut
    Bonjour,
    utilisateur lambda j'ai téléchargé le zip et ça fonctionne bien. Merci

Discussions similaires

  1. Visualisateur hexadécimal avec L'API windows
    Par Pascal.T dans le forum Windows
    Réponses: 1
    Dernier message: 21/01/2007, 21h09
  2. Effet de transition simple entre 2 images
    Par ChrisFAPS dans le forum Flash
    Réponses: 2
    Dernier message: 18/04/2003, 12h41
  3. Bon je vais essayer d'être simple :
    Par fpouget dans le forum Langage SQL
    Réponses: 8
    Dernier message: 09/04/2003, 17h46
  4. Edition d'un simple fichier java
    Par mcrepin dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 21/03/2003, 14h28
  5. recherche exemple simple pour corba en c++
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo