Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String -> Cardinal (https://www.delphipraxis.net/32199-string-cardinal.html)

Kedariodakon 20. Okt 2004 11:45


String -> Cardinal
 
Ich hab nen String mit einem Parameter drinn und möchte diesen zu einer Cardinal umwandeln...

Nutzen tu ich:
Delphi-Quellcode:
Cardinal := StrToInt64Def( String, 0 );
Problem ist, wenn im String eine negative Zahl ist, ist die Cardinal dann 4294967295 + den negativen Wert...
Aber wenn die Zahl Negativ ist, soll die Cardinal auch 0 sein, so wie wenn nur Müll im String steht :roll:

Hat dazu wer eine einfache Lösung???

Bye

Dax 20. Okt 2004 11:47

Re: String -> Cardinal
 
Nimm Delphi-Referenz durchsuchenStrToIntDef. Deine Methode ist für Int64s gedacht.

Kedariodakon 20. Okt 2004 11:58

Re: String -> Cardinal
 
Aber eine Cardinal kann ja auch größer als eine Integer sein :zwinker:

Und in dem Fall soll brauch ich auch eine, welche größer ist als Integer, aber die kleiner als Int64 ist!
Das ganze soll auch so schnell wie möglich ablaufen und der Prozessoraufwand soll so klein wie möglich gehalten werden!

Zur Zeit sieht das so aus:

Delphi-Quellcode:
If StrToInt64Def( String, 0 ) <= 0 Then Cardinal := 0
                                   Else Cardinal := StrToInt64Def( String, 0 );
aber vielleicht gibt es ja noch was viel besseres und schnelleres :gruebel:

Bye

jim_raynor 20. Okt 2004 11:59

Re: String -> Cardinal
 
Bei Cardinal ist StrToInt64Def schon besser bei grossen Zahlen. Am besten du prüfst den String vor mit Pos, ob ein Minuszeichen enthalten ist. Oder machst es wirklich erst zu einem Int64 und prüfst dann ob es kleiner als 0 ist.

Kedariodakon 20. Okt 2004 12:02

Re: String -> Cardinal
 
Und was is schneller? Das Überprüfen ob ein "-" da ist, oder ob die Int64 kleiner 0 ist?

Bye

Dax 20. Okt 2004 12:03

Re: String -> Cardinal
 
Ja, geht schneller:
Delphi-Quellcode:
var i: Int64;
begin
  i := StrToInt64Def(String, 0);
  if i <= then then
    Cardinal := 0
  else
    Cardinal := i;
end;
Alles, was größer als $FFFFFFFF ist, wird jedoch an der 9. Hexadezimalstelle umgebrochen, das heisst, 4294967297 als Cardinal würde 1 ergeben.

jim_raynor 20. Okt 2004 12:04

Re: String -> Cardinal
 
Das überprüfen auf sollte gegenüber deiner Variante schneller sein, aber deine kannst du ja ganz einfach optimieren.

Delphi-Quellcode:
var
  tmp: Int64;

tmp:=StrToInt64Def( String, 0 );
if tmp <= 0 Then
  Cardinal := 0
else
  Cardinal := tmp;
P.S: Da war jemand ein Tick schneller ;)

Kedariodakon 20. Okt 2004 12:09

Re: String -> Cardinal
 
Dankeschööööööööööön :angel:

Bye


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz