x := (NativeInt(P) - NativeInt(PChar(s))) div {SizeOf(Char)} SizeOf(s[1]) + 1;
Delphi-Quellcode:
var
s: string;
p, p1: PChar;
i: NativeInt absolute p;
i1: NativeInt absolute p1;
begin
s := 'hallo';
p := PChar(s);
p1 := p;
WriteLn('"', p^, '" ', (i - i1) div 2 + 1);
Inc(p, 2);
WriteLn('"', p^, '" ', (i - i1) div 2 + 1);
end;
Oder verpack die die Formel einfach in eine Funktion, so ala
Delphi-Quellcode:
function GetCharIndex(C, Str: PChar): Integer;
//oder
function GetCharIndex(C: PChar; Str: String): Integer;
PS:
Zitat:
addr(pointer(s)^)
- mach einen "Pointer" aus dem String (interner Stringzeiger)
- dereferenziere (^) ihn wieder (Pointer rückgängig)
- und mach wieder einen Zeiger/Pointer (addr) daraus