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.
Sur l’Auteur
Vous 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
MySQL: Sauts de Ligne dans MySQL
Conseil | 0 Commentaires
Lazarus: Charger Fichier en tant que Array d'Octets et Enregistrer Array d'Octets en tant que Fichier
Tutoriel | 0 Commentaires
Script Batch: Arrêter Ordinateur Windows
Tutoriel | 4 Commentaires
Delphi/Lazarus: Afficher la Date et l'Heure actuelles
Conseil | 0 Commentaires
VirtualBox: Changer la Date et l'Heure
Tutoriel | 10 Commentaires
Types de Sujets sur askingbox.com
Article | 0 Commentaires
Convertir les Valeurs de Couleur RVB, CMJN, CMJ, HSV, TColor et XYZ
Tutoriel | 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.