Hexa vers string ?

Résolu
Nero` Messages postés 30 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 juillet 2013 - 21 nov. 2007 à 20:42
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 23 nov. 2007 à 05:45
bonsoir à tous .

Je rencontre un petit problème de débutant .
J'ai besoin de lire un octèt dans un fichier et ensuit de l'afficher dans une textbox ou autre (type string) seulement la methode que je tente d'utiliser me converti la valeur de l'octès lus en valeur décimale. Je ne sais pascomment faire pour passer l'octèt lus en type string.
voila le bout de code qui me pose problème:

var FB : File Of Byte;
     b : Byte;
     test:string;
begin
if opendialog.execute then
  begin
  assignfile(FB , 'test.bin');
   Reset(FB);
    seek(FB,$0000401A); //offset de lecture exemple a cette offset j'ai la valeur hexa 44
     read(FB,b);
    test:=inttostr(b);  //test contien maintenant 68(valeur decimal) et non pas 44(hexa) :(
   closefile(FB);
  end;
end;

quelqu'un pourrait il me dir comment je doit procéder ???
Merci bonne prog ...

5 réponses

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
22 nov. 2007 à 10:19
Tu as dû faire IntToStr(IntToHex)... et donc surcharger la méthode.

IntToHex convertit un entier vers string directement (voir aide en ligne de Delphi).

La bonne utilisation est :
test :IntToHex(b, 8); // 8 longueur de la chaîne à retourner

Bonne prog'
3
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
21 nov. 2007 à 23:51
Salut,

Utilise IntToHex à la place de IntToStr.

Bonne prog'
0
Nero` Messages postés 30 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 juillet 2013
22 nov. 2007 à 09:41
Merci pour cette réponse jappe, mais le compilo me retourne une erreur:
"Aucune version surcharger de IntTohex ......>".

Y a t'il une autre solution ?

Merci.
Bonne prog...
0
Nero` Messages postés 30 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 juillet 2013
22 nov. 2007 à 12:49
Merci japee ça fonctione impécable :) .
J'ai simplement du metre ->
test := IntToHex(b, 2); // 2 à la place de 8 sinon sa me retournait 00000044.

encore merci :)
Bonne prog...
0

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

Posez votre question
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
23 nov. 2007 à 05:45
aie IntToHex est super lourdingue :

const
  _ABTX : array[0..$f] of byte = ($30, $31, $32, $33,
                                  $34, $35, $36, $37,
                                  $38, $39, $41, $42,
                                  $43, $44, $45, $46);

function BTX(const Buffer; const BufferLen: integer): string;
var pR : pWord;
    pB : pByte;
    N  : integer;
begin
  SetLength(Result, BufferLen shl 1);
  pR := pWord(Result);
  pB := @Buffer;
  inc(pB, BufferLen-1);
  for N := 0 to BufferLen-1 do
  begin
    pR^ := word( _ABTX[pB^ shr 4] or (_ABTX[pB^ and $F]  shl 8) );
    inc(pR);
    dec(pB);
  end;
end;

utilisation :

Chaine := BTX(MaVariable, TailleMaVariable);

exemple :

var Buffer:  array[0..1023]  of byte;
...
  RL := stream.Read(Buffer, 1024);
  Chaine := BTX(Buffer, RL);

<hr size="2" width="100%" />
http://deefaze.gnomz.com
0
Rejoignez-nous