Hex-Ansicht einer Datei

Ich bin mit Delphi 2009.

Ich möchte den Inhalt einer Datei (in hexadezimal) in einem memo.

Ich bin mit diesem code :

var
  Buffer:String;
begin
  Buffer := '';
  AssignFile(sF,Source); //Assign file
  Reset(sF); 
  repeat
    Readln(sF,Buffer); //Load every line to a string.
    TempChar:=StrToHex(Buffer); //Convert to Hex using the function
    ...
  until EOF(sF);
end;

function StrToHex(AStr: string): string;
var
I ,Len: Integer;
s: chr (0)..255;
//s:byte;
//s: char;
begin
  len:=length(AStr);
  Result:='';
  for i:=1 to len  do
  begin
    s:=AStr[i];

    //The problem is here. Ord(s) is giving false values (251 instead of 255)
    //And in general the output differs from a professional hex editor.

    Result:=Result +' '+IntToHex(Ord(s),2)+'('+IntToStr(Ord(s))+')';
  end;
  Delete(Result,1,1);
end; 

Wenn ich declare variable "s" als char (ich weiß, dass char geht bis 255) erhalte ich Ergebnisse, die hex-Werte bis zu 65535!

Wenn ich declare variable "s" als byte oder chr (0)..255, es gibt unterschiedliche hex-Werte, im Vergleich zu jeder Hexadezimal-Editor!

Warum ist das so? Wie kann ich die richtigen Werte?

Überprüfen Sie Bilder für die Unterschiede.

1. Bild: Professioneller Hex-Editor.

Hex-Ansicht einer Datei

2. Bild: Funktion Ausgang Memo.

Hex-Ansicht einer Datei

Danke.

  • Sicherlich sollten Sie mit Hilfe AnsiChar und AnsiString eher als WideChar und UnicodeString.
  • Danke. Mit diesem code: function String2Hex(const Buffer: Ansistring): string; begin SetLength(result, 2*Length(Buffer)); BinToHex(@Buffer[1], PWideChar(@result[1]), Length(Buffer)); end; Es funktionierte.
  • NEIN. Ihre Eingabedaten in (Schwerpunkt→) - array von bytes (←Schwerpunkt). Annahme, was Sie können Charakter für die led, die Sie direkt in dieses problem.
InformationsquelleAutor Panos Kal. | 2011-06-10
Schreibe einen Kommentar