Я использую Delphi 7, и мне нужна функция, аналогичная ansipos, но она должна использовать входной аргумент смещения и возвращать смещение целого числа. Я нашел код, подобный этому здесь https://github.com/Fr0sT-Brutal/Delphi_MiniRTL/blob/master/SysUtils.pas, и я хочу изменить вывод, чтобы он был целочисленным смещением. Как я могу получить целочисленное смещение от PChar?
function AnsiStrPos(Str, SubStr: PChar): PChar;
var
L1, L2: Cardinal;
ByteType : TMbcsByteType;
begin
Result := nil;
if (Str = nil) or (Str^ = #0) or (SubStr = nil) or (SubStr^ = #0) then Exit;
L1 := StrLen(Str);
L2 := StrLen(SubStr);
Result := StrPos(Str, SubStr);
while (Result <> nil) and ((L1 - Cardinal(Result - Str)) >= L2) do
begin
ByteType := StrByteType(Str, Integer(Result-Str));
if (ByteType <> mbTrailByte) and
(AnsiCompareStr(Result, SubStr) = 0) then Exit;
if (ByteType = mbLeadByte) then Inc(Result);
Inc(Result);
Result := StrPos(Result, SubStr);
end;
Result := nil;
end;
Например, str: = "sub_string"; Из "sub_string" я хочу найти "string", начните поиск с позиции 4, и результат должен быть 0.