Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: UInt64 Typ-Problem bei Vorgabewerten

  Alt 24. Apr 2009, 12:30
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 18446744073709551615 (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
$2B or not $2B
  Mit Zitat antworten Zitat