Da bekomm ich erstmal folgenden Fehler bei Max und Min,
da es kein Max/Min für UInt64, in der
Unit Math, gibt und er daher auf die nächst möglichen Datentyp für UInt64 ausweicht, also Double (da dort der Wertebereich reinpaßt).
Nja und da dann der Typ Double ist, kann er an Result(UInt64) nicht übergeben werden
Zitat:
[DCC Fehler] Project1.dpr(13): E2010 Inkompatible Typen: 'UInt64' und 'Extended'
PS:
E=1 ist falsch ... denn so käme dieser String "0123a456" bei dir als "richtiger" Integer durch
soo, also in D2009 kompiliert dieses nun erfolgreich und ohne Compilermeldungen.
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils, Math;
function StrToU64(const S:String; aDefault:UInt64=0; aMin:UInt64=Low(UInt64); aMax:UInt64=High(UInt64)): UInt64;
var E: Integer;
begin
Val(S, Result, E);
if E <> 0 then Result := aDefault
else if Result < aMin then Result := aMin
else if Result > aMax then Result := aMax;
end;
var MyU64: UInt64;
begin
MyU64 := StrToU64('123');
if MyU64 = 0 then ;
end.
[add]
hab grad aber etwas bemerkt ...
Val funktioniert nicht
begin
MyU64 := StrToU64('18446744073709551615');
if MyU64 = 0 then ;
end.[/delphi]
hier liefert er statt 1844674407370955161
5 (MaxUInt64) nur 1844674407370955161 und meckert an der letzen Stelle rum ... ich fürchte da hat sich auch ein Int64 in Val eingeschlichen
aber
MyU64 := StrToU64('$FFFFFFFFFFFFFFFF'); funktioniert perfekt ... also hab ich schon richtig gleich von Haus aus in meiner
XML-Klasse richtig gemacht, da alles außerhalb Int64 nach Hex konvertiert wird