Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi IntToStr bei UInt64 (https://www.delphipraxis.net/152977-inttostr-bei-uint64.html)

Jakson 15. Jul 2010 11:21

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"

himitsu 15. Jul 2010 11:38

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?

hathor 15. Jul 2010 12:42

AW: IntToStr bei UInt64
 
Zitat:

Zitat von Jakson (Beitrag 1035442)
...Nach langen herumprobieren hab ich es mal mit "Format" probiert und siehe dar "Format('%u',[UInt64(-1)])" liefert die gewünschten "18446744073709551615"

http://www.delphibasics.co.uk/NameSp...em&Part=UInt64

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)

hathor 17. Jul 2010 12:15

AW: IntToStr bei UInt64
 
Warum soll man eigentlich Lösungen anbieten,
wenn sich der TE offensichtlich nicht dafür interessiert?

toms 17. Jul 2010 12:51

AW: IntToStr bei UInt64
 
Zitat:

Zitat von hathor (Beitrag 1035821)
Warum soll man eigentlich Lösungen anbieten,
wenn sich der TE offensichtlich nicht dafür interessiert?

Etwas OT:
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.

hans ditter 17. Jul 2010 13:08

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...

Jakson 19. Jul 2010 09:57

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:

Meine Erkenntnis möchte ich Euch nicht vorenthalten.
Trotzdem Danke

Stevie 19. Jul 2010 10:44

AW: IntToStr bei UInt64
 
Delphi updaten :P UIntToStr

himitsu 19. Jul 2010 11:31

AW: IntToStr bei UInt64
 
Zitat:

Zitat von Stevie (Beitrag 1036140)
Delphi updaten :P UIntToStr

Ohh, das ist mir auch noch nicht aufgefallen

wobei ...
Delphi-Quellcode:
function UIntToStr(Value: Cardinal): string;
begin
  FmtStr(Result, '%u', [Value]);
end;

function UIntToStr(Value: UInt64): string;
begin
  FmtStr(Result, '%u', [Value]);
end;
FmtStr entspricht Delphi-Referenz durchsuchenFormat

xZise 19. Jul 2010 11:51

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 07:15 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz