22 Voix

Delphi/Lazarus: Afficher Array d'Octets sous forme de Chaîne de Valeurs HEX

Conseil de Stefan Trost | Dernière mise à jour le 18/02/2023 | Créé le 02/04/2021

Lorsque vous travaillez avec des tableaux d'octets, la question de la visualisation se pose tôt ou tard. Ici, il est une bonne idée de sortir les octets individuels sous forme hexadécimale comme chaîne (string) afin d'afficher ensuite cette chaîne à l'utilisateur, par exemple dans un champ mémo ou via un message. Dans cette astuce, je veux vous montrer une fonction qui fait exactement cela.

Dans l'exemple, nous utilisons la définition suivante d'un tableau d'octets:

type
  TByteArr = array of Byte;

Fonction pour convertir les Tableaux d’Octets en Chaînes Hexadécimales

Pour visualiser des tableaux d'octets de ce type dans une chaîne, nous utilisons la fonction suivante. La fonction parcourt le tableau d'octets transmis en tant que premier paramètre octet par octet et convertit chaque valeur d'octet individuelle en sa valeur hexadécimale correspondante:

function ByteArrayToHexString(AByteArray: TByteArr; ASep: string = ''): string;
var
  i, k: integer;
begin
  result := '';

  if ASep = '' then begin
     for i := low(AByteArray) to high(AByteArray) do 
       result := result + IntToHex(AByteArray[i], 2);
  end else begin
     k := high(AByteArray);
     for i := low(AByteArray) to k do begin
        result := result + IntToHex(AByteArray[i], 2);
        if k <> i then result := result + ASep;
     end;
  end;
end; 

La fonction peut être appelée avec juste un tableau d'octets ou éventuellement avec un séparateur comme deuxième paramètre, qui est écrit entre les octets individuels pour une meilleure clarté et lisibilité. Nous avons défini ce séparateur sur une chaîne vide par défaut dans la fonction, de sorte que lorsque la fonction est appelée avec un seul paramètre, aucun séparateur n'est écrit entre les octets individuels.

Exemple d’Appel de la Fonction

Regardons un exemple de la façon dont nous pouvons utiliser la fonction présentée:

var
  BA: TByteArr;
  s: string;
begin
  SetLength(BA, 4);
  BA[0] := 65;
  BA[1] := $41;
  BA[2] := %1000001; // cela ne fonctionne que dans Lazarus
  BA[3] := ord('A');

  s := ByteArrayToHexString(BA);        // 41414141
  s := ByteArrayToHexString(BA, ' ');   // 41 41 41 41
end;

Dans cet exemple, nous créons d'abord un tableau d'octets de 4 octets de long, puis nous le remplissons avec des valeurs. Ensuite, nous utilisons notre fonction pour afficher ces valeurs.

Même si nous avons attribué des valeurs "différentes" aux éléments individuels du tableau, chaque élément du tableau a la même valeur après le remplissage. Nous venons d'écrire la valeur hexadécimale "41" de différentes manières: une fois en tant que valeur décimale (65), une fois en tant que valeur binaire (1000001) et une fois en appelant la fonction ord('A'), qui nous donne la valeur ASCII de la lettre "A", qui est aussi 65 ou #41.

Charger et Enregistrer un Tableau d'Octets

Dans ce contexte, il est également intéressant de savoir comment charger ou enregistrer un tableau d'octets dans respectivement à un fichier. Vous pouvez en savoir plus à ce sujet dans le didacticiel lié, qui montre des fonctions et des exemples pour les deux cas.

RépondrePositifNégatif

Sur l’Auteur

AvatarVous pouvez trouver des logiciels de Stefan Trost sur fr.sttmedia.com. Avez-vous besoin d'un logiciel personnalisé selon vos propres besoins? Écrivez-nous: fr.sttmedia.com/contact
Voir Profil

 

Sujets Connexes

VirtualBox: Changer la Date et l'Heure

Tutoriel | 10 Commentaires

Types de Sujets sur askingbox.com

Article | 0 Commentaires

Avis Important

Veuillez noter: Les contributions publiées sur askingbox.com sont des contributions d’utilisateurs et ne doivent pas remplacer les conseils d’un professionnel. Ils ne sont pas vérifiés par des indépendants et ne reflètent pas nécessairement l’opinion de askingbox.com. Apprendre encore plus.

Participer

Posez votre propre question ou écrivez votre propre article sur askingbox.com. Voici comment.