55 Stimmen

Delphi/Lazarus: Byte Array als String aus HEX-Werten anzeigen

Tipp von Stefan Trost | Letztes Update am 18.02.2023 | Erstellt am 02.02.2014

Bei der Arbeit mit Byte-Arrays stellt sich früher oder später die Frage nach einer Visualisierung. Hier bietet es sich an, die einzelnen Bytes in hexadezimaler Form als String auszugeben, um diesen String dann zum Beispiel in einem Memo-Feld oder über eine Meldung dem Nutzer anzuzeigen. In diesem Tutorial möchte ich euch eine Funktion zeigen, die genau dies macht.

Wir benutzen in dem Beispiel die folgende Definition eines Byte-Arrays:

type
  TByteArr = array of Byte;

Funktion zur Umwandlung von Byte-Arrays in Hex-Strings

Zur Visualisierung von Byte-Arrays dieses Typs in einen String nutzen wir die folgende Funktion. Die Funktion geht den als ersten Parameter übergebenen Byte-Array Byte für Byte durch und wandelt jeden einzelnen Byte-Wert in seinen entsprechenden hexadezimalen Wert um:

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; 

Die Funktion kann entweder nur mit einem Byte-Array aufgerufen werden oder optional mit einem Trennzeichen als zweiten Parameter, das zwischen die einzelnen Bytes zur besseren Übersichtlichkeit und Lesbarkeit geschrieben wird. Diesen Separator haben wir in der Funktion per Default auf einen leeren String gesetzt, so dass bei einem Aufruf der Funktion mit nur einem Parameter kein Trennzeichen zwischen die einzelnen Bytes geschrieben wird.

Beispielaufruf der Funktion

Schauen wir uns ein Beispiel an, wie wir die vorgestellte Funktion nutzen können:

var
  BA: TByteArr;
  s: string;
begin
  SetLength(BA, 4);
  BA[0] := 65;
  BA[1] := $41;
  BA[2] := %1000001; // geht nur in Lazarus
  BA[3] := ord('A');

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

In diesem Beispiel erstellen wir uns zunächst einen Byte-Array, der 4 Bytes lang ist und füllen diesen anschließend mit einigen Werten. Danach benutzen wir unsere Funktion, um diese Werte auszugeben.

Auch wenn wir den einzelnen Array-Elementen "verschiedene" Werte zugewiesen haben, steht jedes Element des Arrays nach der Befüllung auf dem gleichen Wert. Wir haben den hexadezimalen Wert "41" lediglich in verschiedenen Schreibweisen notiert: einmal als dezimalen Wert (65), einmal als binären Wert (1000001) und einmal über den Aufruf der Funktion ord('A'), die uns den ASCII-Wert des Buchstabens "A" liefert, der ebenfalls 65 beziehungsweise #41 ist.

Byte Array laden und speichern

In diesem Zusammenhang ist auch interessant, wie man einen Byte Array aus einer Datei laden oder speichern kann. Mehr dazu erfahrt ihr in dem verlinkten Tutorial, das Funktionen und Beispiele für beide Fälle zeigt.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.