![]() |
String -> Cardinal
Ich hab nen String mit einem Parameter drinn und möchte diesen zu einer Cardinal umwandeln...
Nutzen tu ich:
Delphi-Quellcode:
Problem ist, wenn im String eine negative Zahl ist, ist die Cardinal dann 4294967295 + den negativen Wert...
Cardinal := StrToInt64Def( String, 0 );
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 |
Re: String -> Cardinal
Nimm
![]() |
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:
aber vielleicht gibt es ja noch was viel besseres und schnelleres :gruebel:
If StrToInt64Def( String, 0 ) <= 0 Then Cardinal := 0
Else Cardinal := StrToInt64Def( String, 0 ); Bye |
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.
|
Re: String -> Cardinal
Und was is schneller? Das Überprüfen ob ein "-" da ist, oder ob die Int64 kleiner 0 ist?
Bye |
Re: String -> Cardinal
Ja, geht schneller:
Delphi-Quellcode:
Alles, was größer als $FFFFFFFF ist, wird jedoch an der 9. Hexadezimalstelle umgebrochen, das heisst, 4294967297 als Cardinal würde 1 ergeben.
var i: Int64;
begin i := StrToInt64Def(String, 0); if i <= then then Cardinal := 0 else Cardinal := i; end; |
Re: String -> Cardinal
Das überprüfen auf sollte gegenüber deiner Variante schneller sein, aber deine kannst du ja ganz einfach optimieren.
Delphi-Quellcode:
P.S: Da war jemand ein Tick schneller ;)
var
tmp: Int64; tmp:=StrToInt64Def( String, 0 ); if tmp <= 0 Then Cardinal := 0 else Cardinal := tmp; |
Re: String -> Cardinal
Dankeschööööööööööön :angel:
Bye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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-2025 by Thomas Breitkreuz