![]() |
IntToStr bei UInt64
Ich bin gerade über was drüber gestolpert was eigentlich eh logisch ist, ich aber daran nicht gedacht habe.
Meine Erkenntnis möchte ich Euch nicht vorenthalten. Zur Vorgeschichte: Ich verwende eine UInt64 Variable um darin die Benutzerberechtigung zu speichern. Diese werden dann in einer MySql Datenbank gespeichert. Beim Zusammenstöpseln des Strings habe ich die altbekannte und oft verwendete Funktion IntToStr verwendet. Wurden alle möglichen Rechte vergeben also "18446744073709551615" so lieferte IntToStr trotzdem es eine unsigned Variable war ein "-1". Beim abspeichern in MySql wurde "0" daraus. Statt allen rechten hatte der Benutzer jetzt gar keine. :shock: Nach langen herumprobieren hab ich es mal mit "Format" probiert und siehe dar "Format('%u',[UInt64(-1)])" liefert die gewünschten "18446744073709551615" |
AW: IntToStr bei UInt64
Es gibt nunmal nur zwei überladene IntToStr-Funktionen.
- einmal mit LongInt - und dann noch mit Int64 genauso, wie es nur StrToInt und StrToInt64 gibt. Heißt also, daß man damit kein UInt64 korrekt behandeln kann. Einzige Möglichkeiten wären FloatToStr (aber das könnte Rundungsfehler beinhalten), Format und die alten Val- und Str-Funktionen. Und jetzt die Gegenfrage: Wo genau ist nun dein Problem? Oder war das nur eine allgemeine Bekanntmachung eines "bekannten" Problems? |
AW: IntToStr bei UInt64
Zitat:
![]() Description The UInt64 structure holds positive integer values from 0 to 18,446,744,073,709,551,615. Note that when converting to Hexadecimal, xFFFFFFFFFFFFFFFF for UInt64 means 18,446,744,073,709,551,615. , but for Int64 it means -1. Methods CompareTo Compares the current UInt64 value to another Equals Determines if the current UInt64 equals another Parse Converts a string representation of a UInt64 into a UInt64 value ToString Converts the current UInt64 value to a string Fields MinValue Integer Smallest possible value : 0 (0x0000000000000000 in hex) MaxValue Integer Largest possible value : 18,446,744,073,709,551,615 (0xFFFFFFFFFFFFFFFF in hex) |
AW: IntToStr bei UInt64
Warum soll man eigentlich Lösungen anbieten,
wenn sich der TE offensichtlich nicht dafür interessiert? |
AW: IntToStr bei UInt64
Zitat:
Keine Antwort <> kein Interesse! Evtl. hat er das Thema nicht abonniert und erhält so keine Benachrichtigung bei Antworten oder er befindet im Urlaub oder ... Deine Antwort könnte jedoch auch für andere interessant sein, welche mit dem gleichen Problem konfrontiert sein werden. |
AW: IntToStr bei UInt64
Wie himitsu schon bemerkt hat, könnte es auch sein, dass er uns dieses Problem und dessen Lösung einfach nur zur Verfügung stellen wollte...
|
AW: IntToStr bei UInt64
Danke für die Beispiele und Erläuterungen.
Und wie "toms" und "hans ditter" richtig vermutet haben war ich die tage verhindert und konnte nicht ins inet. Außerdem habe ich mit der Funktion "Format('%u'..." schon eine zufriedenstellende Lösung gefunden. Meiner Meinung nach gibt es dabei keine Nachteile. Das "IntToStr" nur zwei Überladungen hat habe ich nachher auch gesehen. Was mich schockiert hat war eher die gleichgültigkeit mit der Delphi die Typenkonversion vorgenommen hat. Bei jeder anderen Zuweisung wo die Typen nicht übereinstimmen warnt es ja auch. Zu der Funktion ".ToString": In Delphi ist wenn ich mich nicht recht irre die "UInt64" ein echter VariablenTyp und keine Struktur oder Klasse so wie unter ".Net". Somit funktioniert das "ToString" auch nicht. Weiters konnte ich zu diesem Thema weder hier im Forum noch auf Google etwas sinnvolles finden. Daher der neue Thread um anderen behilflich zu ein. Außerdem stehts eh da: Zitat:
|
AW: IntToStr bei UInt64
Delphi updaten :P
![]() |
AW: IntToStr bei UInt64
Zitat:
wobei ...
Delphi-Quellcode:
FmtStr entspricht
function UIntToStr(Value: Cardinal): string;
begin FmtStr(Result, '%u', [Value]); end; function UIntToStr(Value: UInt64): string; begin FmtStr(Result, '%u', [Value]); end; ![]() |
AW: IntToStr bei UInt64
Abgesehen davon ist es nicht sinnvoller da eine weitere Überladung zu erstellen? (bzw Embarcadero (?) implementiert das eben)
MfG Fabian |
AW: IntToStr bei UInt64
Überladungen funktionieren leider nicht so richtig :cry:
Delphi kann nur innerhalb einer Unit dieses automatisch unterscheiden. Wenn man jetzt selber IntToStr mit einer UInt64-Version überläd, dann werden die Delphieigenen Funktionen quasi ausgeblendet und man kann diese nur noch über ihren Namespace aufrufen. Delphi erkennt dann also nur noch die Deklarationen der zuletzt eingebundenen Unit. |
AW: IntToStr bei UInt64
Zitat:
|
AW: IntToStr bei UInt64
Hatte es leider selber mitbekommen, wie es nicht ging und hatte bis jetzt auch noch nichts davor gehört, daß es Delphi inzwischen kann.
Zwar noch zu Delphi 7-Zeiten und dann auch nochmal unter TDE, wo ich versuchte IntToStr für eine kleine BigMathLib zu überladen. [edit] komisch, weiß garnicht wieso es damals nicht ging, aber jetzt geht es urplötzlich :shock: (D7 und D2010)
Delphi-Quellcode:
function IntToStr(b: Byte): String; overload;
begin Result := 'Test'; end; procedure TForm1.FormCreate(Sender: TObject); var i: Integer; b: Byte; begin i := 456789; b := 123; ShowMessage(IntToStr(i) + ' ' + IntToStr(b)); end; Zitat:
Vielleicht ging es damals ja aus einem Anderem Grund nicht und ich hatte mich dann durch die Autovervollständigung dazu verleiten lassen, daß es an einem nichtfunktionierenden Overloading liegt. :gruebel: |
AW: IntToStr bei UInt64
Zitat:
|
AW: IntToStr bei UInt64
Da zerbricht man sich den Kopf wie man da tut und dann gibt's da schon genau die Funktion die man brauch nur keiner kennt sie :lol:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 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 by Thomas Breitkreuz