AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei inhalt als HEX-String ausgeben...

Ein Thema von Ares · begonnen am 11. Feb 2008 · letzter Beitrag vom 11. Feb 2008
Antwort Antwort
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Datei inhalt als HEX-String ausgeben...

  Alt 11. Feb 2008, 15:57
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 11. Feb 2008, 16:03
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 11. Feb 2008, 16:04
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

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

  Alt 11. Feb 2008, 16:06
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
Miniaturansicht angehängter Grafiken
screenshot_184.png  
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

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

  Alt 11. Feb 2008, 16:20
Delphi-Referenz durchsuchenIntToHex wollt' ich nur nmal erwähnen...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

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

  Alt 11. Feb 2008, 16:23
genau das ist die vorgefertigte Funktion 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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 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