Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Binär ersetzen / binäre Suche

  Alt 16. Sep 2007, 02:27
Hallo.

Funktioniert leider nicht.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  x: TFileStream;
  s: string;
begin
  x := TFileStream.Create('test.xyz', fmOpenReadWrite or fmShareDenyWrite);
  try
    x.Position := 0;
    setlength(s, x.Size-1);
    x.Read(s[1], x.Size-1);

    s := StringReplace(s, #$0E, #$7D, [rfReplaceAll]);

    x.Position := 0;
    x.Write(s[1], length(s))
  finally
    x.free;
  end;

  close;
end;
Es funktioniert, wenn ich eine Zeichenkette vom Anfang suche und ersetze. Wenn ich jedoch etwas suchen und ersetzen will, was vom Dateianfang durch ein Null-Byte (#00h) getrennt ist, passiert nichts.

12 34 56 0E 78 00 12 00 ... -> 12 34 56 7D 78 00 12 00 (OK)
12 34 56 88 78 00 0E 00 ... -> 12 34 56 88 78 00 0E 00 (Fehler)

Scheinbar arbeitet StringReplace() intern mit PChar's, was dazu führen könnte, dass #00h's als Schlussbegrenzung angesehen werden. Dadurch ist StringReplace() scheinbar nicht Binary-Safe, obwohl Strings von Grund auf Binary-Safe sind. Oder hab ich was falsch gemacht?

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat