![]() |
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 |
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. |
Re: Datei inhalt als HEX-String ausgeben...
Hallo,
etwas fertiges wüßte ich nicht. Ich hatte das mal so gelöst:
Delphi-Quellcode:
Passt jetzt nicht ganz zu Deiner Problemstellung, aber ich
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; denke die Ansätze hier kannst Du gut verwenden. Grüße Klaus |
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; ![]() |
Re: Datei inhalt als HEX-String ausgeben...
![]() |
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 07:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz