![]() |
Delphi-Version: XE2
PChar Zeichen Index
Hi,
gibt es eine sichere Methode den Zeichenindex eines PChars zu erhalten? Beispiel:
Delphi-Quellcode:
var
s:string; p:pchar; begin s:='hallo'; p:=pointer(s); writeln(integer(p)); //hier soll 1 für das 1. Zeichen, auf das p zeigt, ausgegeben werden inc(p,2); writeln(integer(p)); //hier soll 3 für das 3. Zeichen, auf das p zeigt, ausgegeben werden end; |
AW: PChar Zeichen Index
Mathematik?
Delphi-Quellcode:
Index := aktuelle_Position - Anfangsposition{Position des ersten Zeichens};
Eventuell auch noch
Delphi-Quellcode:
, jenachdem ab wo gezählt werden soll.
+ 1
Und nicht vergessen: Unicode ... 1 Zeichen = 2 Byte |
AW: PChar Zeichen Index
Das war mir klar, ich wusste nur nicht genau wie ich an die Anfangsposition komme, aber jetzt hab ich es:
Delphi-Quellcode:
Ist das denn sicher, also funktioniert das immer, auch mit Unicode und sehr langen Strings?
var
s:string; p:pchar; begin s:='hallo'; p:=pointer(s); writeln(p-@pointer(s)^+1); //hier soll 1 für das 1. Zeichen, auf das p zeigt, ausgegeben werden inc(p,2); writeln(p-@pointer(s)^+1); //hier soll 3 für das 3. Zeichen, auf das p zeigt, ausgegeben werden end; |
AW: PChar Zeichen Index
Ähhhhm, ein @ ?
@ und ^ heben sich auf.
Delphi-Quellcode:
= Position im Speicher
writeln(integer(p));
Du hast 2 Pointer und brauchst 2 Integer (besser NativeInt, wegen eventuellem 64 Bit). Tipp: SizeOf(Char) kann man für eine Division verwenden. |
AW: PChar Zeichen Index
So? Das funktioniert auch ohne Division.
Delphi-Quellcode:
writeln(p-addr(pointer(s)^)+1);
|
AW: PChar Zeichen Index
Delphi-Quellcode:
x := (NativeInt(P) - NativeInt(PChar(s))) div {SizeOf(Char)} SizeOf(s[1]) + 1;
Delphi-Quellcode:
Oder verpack die die Formel einfach in eine Funktion, so ala
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;
Delphi-Quellcode:
PS:
function GetCharIndex(C, Str: PChar): Integer;
//oder function GetCharIndex(C: PChar; Str: String): Integer; Zitat:
- dereferenziere (^) ihn wieder (Pointer rückgängig) - und mach wieder einen Zeiger/Pointer (addr) daraus |
AW: PChar Zeichen Index
OK, danke für die Hilfe.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz