Gewusst wie: Konvertieren zwischen signierten und unsignierten Zahlen

Artikel-ID: 189323 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Visual Basic für Applikationen unterstützt nur signierte 2 und 4-Byte-Ganzzahlen, während andere Sprachen, z. B. C, signierte und unsignierte Zahlen unterstützen. Dieser Artikel bietet Konvertierungsfunktionen zwischen signierten und unsignierten 4-Byte-Ganzzahlen und zwischen signierten und unsignierten 2-Byte-Ganzzahlen.

Weitere Informationen

In VBA ist der Bereich der ganzzahlige Werte von-32768 +32767 und für lange Werte im Bereich von-2147483648 bis 2147483647. Wenn ausführenden API aufruft oder übergeben oder Werte ohne Vorzeichen im Bereich von 0 bis 65535 oder 0, 4294967296 empfangen Aufrufen einer DLL in C geschrieben werden Sie zu angefordert werden können. Die unten angegebenen Konvertierungsfunktionen konvertieren eine ganze Zahl ohne Vorzeichen in einen Long-Wert und auch aus einer unsigned long in Double für die Eingabe und Anzeige oder andere Berechnungen.

Die vier Funktionen sind:
UnsignedToLong
LongToUnsigned
UnsignedToInteger
IntegerToUnsigned

UnsignedToLong

Die Funktion akzeptiert einen Double mit einem Wert im Bereich von unsigned Long und gibt einen Long-Wert, das Sie an einer API übergeben können, die unsigned erfordert Long.

LongToUnsigned

Die Funktion akzeptiert unsigned long von einer API und konvertiert ihn in einen Double zur Anzeige oder arithmetische.

UnsignedToInteger

Die Funktion übernimmt einen Wert mit einem Wert im Bereich der eine ganze Zahl ohne Vorzeichen und gibt eine ganze Zahl, das Sie an einer API übergeben können, die eine ganze Zahl ohne Vorzeichen benötigt.

IntegerToUnsigned

Die Funktion akzeptiert eine ganze Zahl ohne Vorzeichen aus und API und konvertiert ihn in einen Long-Wert zur Anzeige oder arithmetische.
   Declare Function MyAPI Lib "xxx" (Value As Long) As Long
   Dim uResult As Long
   uResult = MyAPI(UnsignedToLong(3300000000))
   Debug.Print "Return Code: " & LongToUnsigned(uResult)
				
im obigen Beispiel die MyAPI-API akzeptiert unsigned long als Parameter und gibt unsigned long als Ergebnis code. Da VBA nur signierte Long versteht, signiert die DECLARE-Anweisung verwendet Long. Der UnsignedToLong
function converts a number outside the range of signed Long (but within the
				
Zellbereich unsigned long) in eine signierte Long für Zwecke die API aufrufen. Die LongToUnsigned-Funktion führt die entgegengesetzte Konvertierung.

Ohne diese Funktionen müssten das Eingabeargument als angegeben wurden eine signierte Long, in diesem Fall-994967296 und den Rückgabewert müsste als ein Wert mit Vorzeichen, möglicherweise auch als eine Negative angezeigt werden Anzahl und nicht intuitiv.

Schritt für Schritt (Beispiel)

  1. Erstellen Sie ein neues VBA-Projekt.
  2. Fügen Sie zu einem Modul den folgenden Code:
          Option Explicit
    
          Private Const OFFSET_4 = 4294967296#
          Private Const MAXINT_4 = 2147483647
          Private Const OFFSET_2 = 65536
          Private Const MAXINT_2 = 32767
    
          Function UnsignedToLong(Value As Double) As Long
            If Value < 0 Or Value >= OFFSET_4 Then Error 6 ' Overflow
            If Value <= MAXINT_4 Then
              UnsignedToLong = Value
            Else
              UnsignedToLong = Value - OFFSET_4
            End If
          End Function
    
          Function LongToUnsigned(Value As Long) As Double
            If Value < 0 Then
              LongToUnsigned = Value + OFFSET_4
            Else
              LongToUnsigned = Value
            End If
          End Function
    
          Function UnsignedToInteger(Value As Long) As Integer
            If Value < 0 Or Value >= OFFSET_2 Then Error 6 ' Overflow
            If Value <= MAXINT_2 Then
              UnsignedToInteger = Value
            Else
              UnsignedToInteger = Value - OFFSET_2
            End If
          End Function
    
          Function IntegerToUnsigned(Value As Integer) As Long
            If Value < 0 Then
              IntegerToUnsigned = Value + OFFSET_2
            Else
              IntegerToUnsigned = Value
            End If
          End Function
    						
  3. Nur Visual Basic: das Projekt ausführen, und es anhalten.
  4. Geben Sie im im direkt-Debug Folgendes:
          ?UnsignedToLong(3300000000)
          ?LongToUnsigned(-55)
          ?UnsignedToInteger(45000)
          ?IntegerToUnsigned(-3000)
  5. Sie erhalten die folgenden Ergebnisse:
    -994967296
    4294967241
    -20536
    62536

Informationsquellen

Weitere Informationen finden Sie in der folgenden Artikel der Microsoft Knowledge Base:
112673Wie nichtsignierten so erfolgreich & zurückkehren Ganzzahlen-DLL von VB

Eigenschaften

Artikel-ID: 189323 - Geändert am: Donnerstag, 15. Juli 2004 - Version: 3.4
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic for Applications 5.0
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
Keywords: 
kbmt kbhowto KB189323 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 189323
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns