Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datei inhalt als HEX-String ausgeben... (https://www.delphipraxis.net/108318-datei-inhalt-als-hex-string-ausgeben.html)

Ares 11. Feb 2008 15:57


Datei inhalt als HEX-String ausgeben...
 
Hallo!

Ich möchte gerne eine beliebige Datei auslesen (TStream) und die Daten dann wie in einem HEX Editor als String ausgeben.

Die einzelnen Bytes per TStream aus einer Datei zu lesen ist kein Problem, aber wandle ich das ganze dann in einen String um?

Die Ausgabe sollte ein wenig formatiert sein (wie in einem HexEditor eben):
AB48 7458 FFFF 3829 BBBB 3232 FCFC DFCF
AB48 7458 FFFF 3829 BBBB 3232 FCFC DFCF

Gibt es vielleicht sogar schon eine fertige Funktion, die einen so formatierten Hex-String liefert?

Besten Dank
Ares

SirThornberry 11. Feb 2008 16:03

Re: Datei inhalt als HEX-String ausgeben...
 
bei hexdecimal ist wie die bases wie der Namen schon sagt 16 wo hingegen unser normales Zahlensystem decimal die basis 10 hat. Nimmst du also ein Zeischen her was Decimalwert 255 hat musst du dieses einfach auf die Basis 16 umrechnen und das entsprechende zeichen ausgeben (oder vorgefertigte Funktionen nutzen).
Ich finde allerdings das du wissen solltest was sich hinter hexdecimal eigentlich verbirgt, also lieber erstmal alles von hand zu fuß machen und wenn du das prinzip verstanden hast spricht nix mehr gegen die Verwendung von bereits vorhandenen Funktionen.

Klaus01 11. Feb 2008 16:04

Re: Datei inhalt als HEX-String ausgeben...
 
Hallo,

etwas fertiges wüßte ich nicht.
Ich hatte das mal so gelöst:

Delphi-Quellcode:
procedure TFormShowData.FormShow(Sender: TObject);
var
  i:byte;
begin
  with hexOutput do
    begin
      Clear;
      Text:='  ';
      for i:=0 to 15 do
        Text:=Text+' '+IntToHex(i,2);
      Text:=Text+#13#10+'00: ';
      for i:=0 to high(dataSet.raw) do
        begin
          Text:=Text + IntToHex(dataSet.raw[i],2)+' ';
          if (i+1) mod 16 = 0 then
            begin
              Text:=Text+#13#10;
              Text:=Text+IntToHex((i+1),2)+': ';
            end;
        end;
      end;
  ComboBox1.ItemIndex:=0;
end;
Passt jetzt nicht ganz zu Deiner Problemstellung, aber ich
denke die Ansätze hier kannst Du gut verwenden.

Grüße
Klaus

toms 11. Feb 2008 16:06

Re: Datei inhalt als HEX-String ausgeben...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

P. Below (Team B) hat mal eine solche Funktion geschrieben:

Delphi-Quellcode:
type
  TDisplayProc = procedure(const s: string) of object;

procedure ShowBinary(var Data; Count: Cardinal; DispProc: TDisplayProc);

implementation


procedure ShowBinary(var Data; Count: Cardinal; DispProc: TDisplayProc);
var
  line: string[80];
  i: Cardinal;
  p: PChar;
  nStr: string[4];
const
  posStart = 1;
  binStart = 7;
  ascStart = 57;
  HexChars: PChar = '0123456789ABCDEF';
begin
  p   := @Data;
  line := '';
  for i := 0 to Count - 1 do
  begin
    if (i mod 16) = 0 then
    begin
      if Length(line) > 0 then
        DispProc(line);
      FillChar(line, SizeOf(line), ' ');
      line[0] := Chr(72);
      nStr   := Format('%4.4X', [i]);
      Move(nStr[1], line[posStart], Length(nStr));
      line[posStart + 4] := ':';
    end;
    if p[i] >= ' ' then
      line[i mod 16 + ascStart] := p[i]
    else
      line[i mod 16 + ascStart] := '.';
    line[binStart + 3 * (i mod 16)]    := HexChars[(Ord(p[i]) shr 4) and $F];
    line[binStart + 3 * (i mod 16) + 1] := HexChars[Ord(p[i]) and $F];
  end;
  DispProc(line);
end;


procedure TForm1.Display(const S: string);
begin
  Memo1.Lines.Add(S);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ms: TMemoryStream;
begin
  if Opendialog1.Execute then
  begin
    ms := TMemoryStream.Create;
    try
      ms.LoadFromfile(OpenDialog1.FileName);
      ShowBinary(ms.Memory^, ms.Size, Display);
    finally
      ms.Free
    end;
  end;
end;
Source

DGL-luke 11. Feb 2008 16:20

Re: Datei inhalt als HEX-String ausgeben...
 
Delphi-Referenz durchsuchenIntToHex wollt' ich nur nmal erwähnen...

SirThornberry 11. Feb 2008 16:23

Re: Datei inhalt als HEX-String ausgeben...
 
genau das ist die vorgefertigte Funktion :-D Aber wie bereits erwähnt finde ich er sollte erstmal wissen was hex wirklich ist bevor er damit rum hantiert. Sonst weiß er später gar nicht ob der Wert überhaupt stimmt der Angezeigt wird wenn er sich darunter nichts vorstellen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz