So stelle ich eine binäre Datei hexadezimal dar:
Delphi-Quellcode:
type
TMyByteArray = array of byte;
const
HEXWIDTH = 2;
BUFFERSIZE = 8;
function BuffToHex(ByteArray: TMyByteArray): string;
var
i: Integer;
s: String;
foo: string;
begin
Setlength(foo, length(ByteArray) * (HEXWIDTH+2));
for i := 0 to length(ByteArray) - 1 do
begin
s := '$'+IntToHex(ord(ByteArray[i]), HEXWIDTH) + ' ';
Move(s[1], foo[i * (HEXWIDTH+2) + 1], length(s));
end;
result := foo;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
Buffer: TMyByteArray;
BytesRead: Longint;
s: String;
i: Int64;
begin
i := 0;
SetLength(Buffer, BUFFERSIZE);
fs := TFileStream.Create('G:\MP3s\Beatles\Beatles - Blue Jay Way.mp3',
fmOpenRead);
SetLength(s, fs.size*(HEXWIDTH+2));
Progressbar1.Max := fs.Size div BUFFERSIZE;
try
repeat
BytesRead := fs.Read(Buffer[0], BUFFERSIZE);
Move(BuffToHex(Buffer)[1], s[i*(HEXWIDTH+2)+1], 10);
Inc(i);
Progressbar1.StepIt;
Application.ProcessMessages;
until BytesRead < BUFFERSIZE;
Memo1.Text := s;
finally
FreeAndNil(fs);
end;
end;
Jetzt habe ich aber festgestellt, das je nach Buffergröße die Datei anders aussieht.
Wo ist da mein Denkfehler im Code? ich finde hin einfach nicht.