Binaire vers Hexa (BinToHex) et Hexa vers Binaire (HexToBin)


Contenu du snippet

type
   DByte = array[0..1] of byte;
 
 
 { BinToHex
 
   Convertis une donnée binaire vers sa représentation hexadécimal (chaine).
 
   Paramètres :
     Buffer [I] non typé
     Len [I] entier, taille du buffer
     Str [O] chaine, retour
 
   Retour :
     Retourne une chaine (Str) représentant la donnée en hexadécimal.
 }
 procedure BinToHex(const Buffer; const Len: integer; var Str: string);
 var pB : ^byte;
     pR : ^DByte;
     N : integer;
 const
   BTC : array[$0..$F] of byte = ($30,$31,$32,$33,$34,$35,$36,$37,
                                  $38,$39,$41,$42,$43,$44,$45,$46);
 begin
   SetLength(Str, Len shl 1);
   pB := @Buffer;
   pR := @Str[1];
   for N := 0 to Len-1 do
   begin
     pR^[0] := BTC[pB^ shr 4];
     pR^[1] := BTC[pB^ and $0F];
     inc(pR);
     inc(pB);
   end;
 end;
 
 
 { HexToBin
 
   Convertis une chaine representant une donnée en hexadecimal vers une donnée brute.
 
   Parametres :
     Str [I] chaine representant la donnée en hexadecimal
     LenStr [I] entier, taille de la chaine
     Buffer [O] buffer de sortie pour la donnée brute.
 
   Retour :
     Retourne une donnée brute (Buffer) a partir de la chaine Str.
 
   Note : 
     la taille du Buffer doit etre definie avant l'appel a HexToBin, qu'il s'agisse
     d'un pointeur, d'une chaine ou d'un tableau.
 }
 procedure HexToBin(const Str: string; const LenStr: integer; var Buffer);
 var pB   : ^byte;
     pS   : ^DByte;
     LZ,N : integer;
     L,H  : byte;
 begin
   LZ := LenStr shr 1;
 
   pS := @Str[1];
   pB := @Buffer;
   for N := 0 to LZ-2 do
   begin
     case pS^[0] of
       $30..$39 : H := (pS^[0] - $30) shl 4;
       $41..$46 : H := (pS^[0] - $37) shl 4;
       else
         break;
     end;
     case pS^[1] of
       $30..$39 : L := pS^[1] - $30;
       $41..$46 : L := pS^[1] - $37;
       else
         break;
     end;
     pB^ := byte(H or L);
     inc(pS);
     inc(pB);
   end;
 end;
 
 
 

Compatibilité : Delphi 5

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.