![]() |
Delphi-Version: 2010
StrToUInt64
Kennt jemand eine brauchbare Implementierung von StrToUInt64?
Diese Funktion ist bis heute nicht in der RTL enthalten. |
AW: StrToUInt64
|
AW: StrToUInt64
Gibt es denn inzwischen einen UInt64? :shock:
|
AW: StrToUInt64
Zitat:
![]() |
AW: StrToUInt64
Liste der Anhänge anzeigen (Anzahl: 1)
Auch wenn dieses nicht ganz Uucodetauglich ist, aber
![]() PS: Wenn der String einen Hexadezimalwert darstellt, dann kann man auch StrToInt64 nutzen und es dann nach UInt64 casten, ohne einen Integerüberlauf zu erzeugen. Das ist übrigens auch der Grund, warum meine Serialisierungsfunktionen im himXML, in soeinem Fall, auf HEX umschalten. :stupid: PS: bezüglich des UInt64 ... D7 kennt es auch schon lange, nur daß da "leider" einige Rechenoperationen, wie z.b. DIV und MOD zwar implementiert, aber nicht verwendet werden, dattdessen wird einfach als Int64 gerechnet. Oder bei
Delphi-Quellcode:
sollte das y kein Int64/UInt64 sein.
Inc(x, y)
|
AW: StrToUInt64
Zitat:
![]() ![]() ![]() Gruß, Chris |
AW: StrToUInt64
Mach Dir nichts draus, himi ist nicht dafür bekannt, andere Beiträge komplett zu lesen :roll:
|
AW: StrToUInt64
Mit ist/war es so, als wenn es mit Val ging ... kann aber auch nur eine Sinnestäuschung/Gedächtnisstörung sein :gruebel:
Delphi-Quellcode:
var
i: UInt64; e: Integer; begin Val('10376293541461622783', i, e); if i = 1037629354146162278 then ShowMessage('falsch'); if i = $8FFFFFFFFFFFFFFF then ShowMessage('richtig'); Val('$8FFFFFFFFFFFFFFF', i, e); if i = $8FFFFFFFFFFFFFFF then ShowMessage('richtig'); end; 'n alter Code von mir
Delphi-Quellcode:
[edit]
Function fromStr(Const S: AnsiString; Out i: LargeWord; Default: LargeWord = 0): ByteBool;
Var P: Integer; Begin P := 1; While (P <= _Length(S)) and (S[P] <= ' ') do Inc(P); Result := (P <= _Length(S)) and (S[P] in ['0'..'9']); While (P <= _Length(S)) and (S[P] in ['0'..'9', scThousandSeparator]) do Inc(P); While (P <= _Length(S)) and (S[P] <= ' ') do Inc(P); Result := Result and (P > _Length(S)); If Result Then Begin i := 0; P := 1; While P <= _Length(S) do Begin If S[P] in ['0'..'9'] Then Begin If (i > 1844674407370955161) or ((i = 1844674407370955161) and ((Byte(S[P]) xor $30) > 5)) Then Begin i := Default; Result := False; Exit; End; i := i * 10 + (Byte(S[P]) xor $30); End; Inc(P); End; End Else i := Default; End; gekürzt sieht es wohl in etwa so aus:
Delphi-Quellcode:
Function StrToUInt64(Const S: String; Out i: UInt64; Default: UInt64 = 0): Boolean;
Var P: Integer; Begin P := 1; Result := (P <= Length(S)) and (S[P] >= '0') and (S[P] <= '9'); While (P <= Length(S)) and (S[P] >= '0') and (S[P] <= '9') do Inc(P); Result := Result and (P > Length(S)); If Result Then Begin i := 0; P := 1; While P <= Length(S) do Begin If (i > 1844674407370955161) or ((i = 1844674407370955161) and (Ord(S[P]) - Ord('0') > 5)) Then Begin i := Default; Result := False; Exit; End; i := i * 10 + Ord(S[P]) - Ord('0'); Inc(P); End; End Else i := Default; End; |
AW: StrToUInt64
Zitat:
Danke euch schonmal, sieht so aus, als müsste man sich selber was zurecht basteln, damit das geht. In dem Fall kann ich darauf verzichten und begnüge mich mit nem Bit weniger :roll: |
AW: StrToUInt64
siehe bissl weiter oben :stupid:
(notfalls kann ich och noch die bekannten Exceptions nachrüsten) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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