AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IntToStr bei UInt64

Ein Thema von Jakson · begonnen am 15. Jul 2010 · letzter Beitrag vom 20. Jul 2010
Antwort Antwort
Seite 1 von 2  1 2      
Jakson

Registriert seit: 10. Mär 2006
34 Beiträge
 
#1

IntToStr bei UInt64

  Alt 15. Jul 2010, 12:21
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.

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

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

AW: IntToStr bei UInt64

  Alt 15. Jul 2010, 12:38
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?
$2B or not $2B
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#3

AW: IntToStr bei UInt64

  Alt 15. Jul 2010, 13:42
...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)

Geändert von hathor (15. Jul 2010 um 13:47 Uhr)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

AW: IntToStr bei UInt64

  Alt 17. Jul 2010, 13:15
Warum soll man eigentlich Lösungen anbieten,
wenn sich der TE offensichtlich nicht dafür interessiert?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

AW: IntToStr bei UInt64

  Alt 17. Jul 2010, 13:51
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.
Thomas
  Mit Zitat antworten Zitat
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: IntToStr bei UInt64

  Alt 17. Jul 2010, 14:08
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...

Geändert von hans ditter (17. Jul 2010 um 14:08 Uhr) Grund: Namen die man sich nicht merken kann...:D
  Mit Zitat antworten Zitat
Jakson

Registriert seit: 10. Mär 2006
34 Beiträge
 
#7

AW: IntToStr bei UInt64

  Alt 19. Jul 2010, 10:57
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
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: IntToStr bei UInt64

  Alt 19. Jul 2010, 11:44
Delphi updaten UIntToStr
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: IntToStr bei UInt64

  Alt 19. Jul 2010, 12:31
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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

AW: IntToStr bei UInt64

  Alt 19. Jul 2010, 12:51
Abgesehen davon ist es nicht sinnvoller da eine weitere Überladung zu erstellen? (bzw Embarcadero (?) implementiert das eben)

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler

Geändert von xZise (19. Jul 2010 um 12:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.
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