Entwickler-Ecke

Sonstiges - ...Strings in andere Typen umwandeln?


SMI - Sa 05.10.02 23:47
Titel: ...Strings in andere Typen umwandeln?
Nachdem ich im Forum immer wieder auf die Frage gestoßen bin "wie Konvertiere ich einen String s in ..." habe ich mir gedacht, dass sowas ins FAQ gehört und eine kurze Zusammenstellung verfasst. Selbiges könnte man für Int in ... sowie Real in ... und Pointer in ... auch machen. Würde am besten für in eine neues FAQ Namens ObjectPascal passen.

String -> Integer : StrToInt (FUNCTION)
String -> Real : Val (PROCEDURE)
String -> pChar : pChar (CAST)
String -> pChar/Pointer : @ (Operator)
String -> pChar/Pointer : Pointer (CAST)


Beispiel


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
VAR
 s    : String
 lpS  : PChar;
 p    : Pointer
 i    : Integer;
 r    : Real;

 delphi : Integer;

BEGIN

 i:= StrToInt(i);

 Val(s,r,delphi)

 lps := PChar(s);
 lps :=@s[1];
 lps := pointer(s);  // Schnellste Möglichkeit für String -> PChar

 p := @s[1];
 p := pointer(s);

END;


Moderiert von user profile icondelfiphan: Delphi-Tags hinzugefügt.
Moderiert von user profile iconjasocul: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 08.06.2006 um 09:51


jasocul - Do 08.06.06 09:53

Da sich doch einiges in Delphi geändert hat, habe ich diesen Beitrag für Ergänzungen und Verbesserungen wieder zur Diskussion bereit gestellt.


SmileySN - Do 08.06.06 18:05

Hier mal als erstes die Funktion StrToInt() und IntToStr()

Bei der StrToInt() Funktion muss beachtet werden, dass der Wert den der übergebene String hat im Zahlenbereich vom Typ Integer liegen muss.
Buchstaben und Sonderzeichen dürfen nicht vorliegen.

Hier ein Beispiel dazu:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button1Click(Sender: TObject);
Var
i:Integer;

begin
// Wertebereich Integer: -2.147.483.647 bis 2.147.483.647
// Die Punte stellen Tausendertrenner dar und keine Dezimalstelle
// Integerwerte haben keine Dezimalstellen

i:=StrToInt(Edit1.Text);      // Umwandlung von Text in Integer
// Edit1.Text darf nur Zahlen enthalten und kein Komma oder sonstige Zeichen
// Der Integerwertebereich muss beachtet werden
// ansonsten erscheint ein Meldefenster mit einer Fehlermeldung

Label1.Caption:=IntToStr(i);  // Umwandlung von Integer in String
// Hier kann nicht viel passieren, da i keinen nichtdarstellbaren
// Zustand einnehmen kann
end;


SmileySN - Do 08.06.06 18:23

Hier das ganze noch für Gleitkommazahlen


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button2Click(Sender: TObject);
Var
  Code: Integer;
  r: Real;

begin
// Wandlungen in Zahlen mit Nachkommastellen macht man mit dem Befehl Val()
// Leider wird hier ein Punkt und kein Komma als Dezimalzeichen verlangt

Val(Edit1.Text,r,code);
// In der variablen code ist der FehlerCode enthalten, wenn nicht konvertiert
// werden konnte. Wenn alles OK ist, dann steht Null drin.

If code = 0 Then
  Label1.Caption:=FloatToStr(r);

//Label1.Caption:=FloatToStr(r);  // Umwandlung von Real in String
end;