VB Classic hat leider keinen 64 Bit Integer Datentyp, allerdings versteckt sich im Variant der Typ "Decimal", der groß genug ist, um diese Zahlen aufzunehmen. Mit einfacher Arithmetik lassen sich DWords so umrechnen, dass sie als QWords in Decimals dargestellt werden können. Folgende zwei Funktionen zeigen, wie das geht: ' lngLo: untere 32 Bits ' lngHi: obere 32 Bits ' signed: hat ein Vorzeichen Private Function To64BitInt(ByVal lngLo As Long, ByVal lngHi As Long, _ Optional ByVal signed As Boolean = True) As Variant Dim value As Variant If (lngLo And &H80000000) Then value = CDec(lngLo And &H7FFFFFFF) + CDec(2147483648#) Else value = CDec(lngLo) End If If (Not signed) And (lngHi And &H80000000) Then lngHi = lngHi And &H7FFFFFFF value = value + (CDec(lngHi) + CDec(2147483648#)) * CDec(4294967296#) Else value = value + CDec(lngHi) * CDec(4294967296#) End If To64BitInt = value End Function ' value: QWord ' lngLo: untere 32 Bits ' lngHi: obere 32 Bits Private Sub From64BitInt(ByVal value As Variant, _ ByRef lngLo As Long, ByRef lngHi As Long) Dim varLo As Variant, varHi As Variant varHi = Int(value / CDec(4294967296#)) varLo = value - (varHi * CDec(4294967296#)) If varHi >= 2147483648# Then lngHi = (varHi - 2147483648#) Or &H80000000 Else lngHi = varHi End If If varLo >= 2147483648# Then lngLo = (varLo - 2147483648#) Or &H80000000 Else lngLo = varLo End If End Sub Kleines Beispiel zur Funktionsweise: Private Sub Form_Load() Dim qword As Variant Dim lo_dword As Long Dim hi_dword As Long ' aus 2 DWords ein QWord bilden lo_dword = &HFFFFFFFF hi_dword = &HFFFFFFFF ' = 2 ^ 64 - 1 = 18446744073709551615 ' würde man für den Parameter "signed" true übergeben, ' wäre das Ergebnis -1 qword = To64BitInt(lo_dword, hi_dword, False) MsgBox qword ' aus dem QWord wieder 2 DWords machen From64BitInt qword, lo_dword, hi_dword MsgBox Hex$(hi_dword) & " " & Hex$(lo_dword) ' = FFFFFFFF FFFFFFFF End Sub Dieser Tipp wurde bereits 8.892 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |