gpt4 book ai didi

delphi - StringReplace 的二进制版本

转载 作者:行者123 更新时间:2023-12-03 15:27:59 26 4
gpt4 key购买 nike

我正在尝试在包含大量数据的 RawByteString 上运行 AnsiStrings.StringReplace,其中一些数据需要替换。它会起作用,除了在 StringReplace 内部它将我的字符串转换为 PAnsiChar,因此搜索一旦到达 blob 内的第一个 #0 字节就会结束。

我正在寻找一个与 StringReplace 类似的例程,但可以安全地在可能包含空字节的 blob 上使用。有谁知道吗?

最佳答案

我猜 StringReplace 中的“违规”函数是 AnsiPos->AnsiStrPos

所以...我想缺少一个已经有效的解决方案,我会复制/粘贴 StringReplace 代码并将 AnsiPos 更改为其他内容。 (即 AnsiStrings.PosEx)

function RawByteStringReplace(const S, OldPattern, NewPattern: AnsiString;
Flags: TReplaceFlags): AnsiString;
var
SearchStr, Patt, NewStr: AnsiString;
Offset: Integer;
begin
//Removed the uppercase part...
SearchStr := S;
Patt := OldPattern;

NewStr := S;
Result := '';
while SearchStr <> '' do
begin
Offset := AnsiStrings.PosEx(Patt, SearchStr);
if Offset = 0 then
begin
Result := Result + NewStr;
Break;
end;
Result := Result + Copy(NewStr, 1, Offset - 1) + NewPattern;
NewStr := Copy(NewStr, Offset + Length(OldPattern), MaxInt);
if not (rfReplaceAll in Flags) then
begin
Result := Result + NewStr;
Break;
end;
SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt);
end;
end;

关于delphi - StringReplace 的二进制版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3106139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com