Archiv verlassen und diese Seite im Standarddesign anzeigen : VB5 hex-Funktion
ZeroJump
24.07.2002, 16:06
Hallo, warum kann die hex-Methode in VB5 nur Werte bis 2147483647 als Parameter übernehmen? Danach gibts einen Überlauf. Und warum ist das nirgends dokumentiert?
2147483647 entspricht hexadezimal 7FFFFFFF. Was mache ich, wenn ich Zahlen übergeben möchte, die größer als 2147483647 sind?
Wie du der Tabelle http://www.cpcug.org/user/clemenzi/technical/Languages/DataTypes.htm
entnehmen kannst, gibt es in VB keinen Datentyp, der Zahlen > 2,147,483,647 aufnehmen kann :(
Gruß
Chaq
USSEraser
24.07.2002, 21:26
Das is ne dumme Tabelle
Variants
Do not use this
Dabei wäre das die Lösung.
Eine Vatiant Variable kann den Typ Decimal annehmen. Dann hat sie einen Wertebereich von +/-79.228.162.514.264.337.593.543.950.335 :eek:
Wie du daraus eine Hex Zah machst musst du dir einfallen lassen. Entweder du teilst die Zahl auf und schickst sie mermals durch die Hex-Funktion, oder du schreibst dir diese Funktion selbst.
ZeroJump
25.07.2002, 13:28
@chaq:
*lol* wer lesen kann, is klar im Vorteil. Weisst Du eigentlich wie unflexibel eine Sprache wäre, wenn sie nicht mal Werte über 2147483647 verarbeiten kann?
Deswegen existieren noch Datentypen wie Double und Single und Decimal... :D
@USSEraser:
Warum wurde das von Microsoft so schlecht umgesetzt? Jetzt muss ich mich hinsetzen und eine Standardroutine verbessern?! Das kanns doch nicht sein...
Jetzt werde ich mir mal die Java-Sources anschauen und versuchen das mit VB nachzucoden. Vielen Dank, ZJ
Naja... ob man das so oft braucht....??? :)
Ich code seit fast 10 Jahren mit VB und habe dieses "Problem" noch nicht bemerkt! ;)
Aber so rein prinzipiell meine ich auch, hätten M$ es besser lösen müssen!
Gruss...
Das eigentlich schlimme ist, dass es in VB keine unsigned Datentypen gibt, was einem besondere Freude bereitet, wenn man z.B einen MD5 in VB umsetzen möchte. Aber jetzt wird ja alles besser mit .Net :-)
Hier eine Funktion die das erledigt und übrigens auch Oktalzahlen kann oder was auch immer Euch einfällt :
Private Function double2base(d As Double, Optional base As Integer = 16) As String
Dim rest As Integer
Dim result As String
While d > 0
rest = (d - (Round((d / base) - 0.5, 0) * base))
If rest = base Then
d = d + base
result = "0" & result
Else
Debug.Print rest
result = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", rest + 1, 1) & result
End If
d = (d - rest) / base
Wend
double2base = result
End Function
curly
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.