![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 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