Da es sich explizit um Quad Folgen handelt..
@Maverik ungetestet aus dem Handgelenk geschüttelt:
edit:
Hab's nun doch getestet und da hat noch das mod gefehlt, sonst hängt man auch noch '_' and den letzten quad an
Code:
function leerzeichen(Const Text: String): String;
type PMyQuadMover = {$IFDEF
UNICODE}PUInt64{$ELSE}PLongWord{$ENDIF};
var
Src, Dest, PEnd: PChar;
begin
if Text = '' then
Result :=''
else begin
SetLength(Result,length(Text)+(Length(Text) div 4)-Ord(Length(Text) mod 4 = 0));
PEnd := PChar(@Text[Length(Text)])-4;
Dest := Pointer(Result);
Src := Pointer(Text);
while (Src <= PEnd) do begin//making a quad processing loop
PMyQuadMover(Dest)^ := PMyQuadMover(Src)^;
(Dest+4)^ := '_';
Inc(Dest, 5);
Inc(Src, 4);
end;
Inc(PEnd, 4);
while Src < PEnd do //processing final chars
begin
Dest^ := Src^;
Inc(Src);
Inc(Dest);
end;
Dest^ := Src^; //null term save
end;
end;
Das wäre schnell.. man könnte die Loops auch nach auf octets erhöhen, auf RefCount und Length vorher testen usw ..