Makale numarası: 189323 - Son Gözden Geçirme: 15 Temmuz 2004 Perşembe - Gözden geçirme: 3.4

Nasıl yapılır: imzalı ve imzasız sayılar arasında dönüştürme

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Imzalı ve imzasız tamsayı C gibi başka dillerde destekler ancak Visual Basic for Applications, yalnızca imzalı 2 ve 4 bayt tamsayı, destekler. Bu makalede, imzalı ve imzasız 2 baytlık tamsayı arasında ve 4 bayt tamsayı olarak imzalı ve imzasız arasında'dönüştürme işlevleri sağlar.

Daha fazla bilgi

VBA'DA, bu aralığı tamsayı değerleri ise -32768 ' +32767 ve uzun değerleri -2147483648 ile 2147483647 arasında. API yapma çağırdığında veya içinde geçmesi için istenebilir, C yazılmış bir DLL arama veya imzasız değerleri için 0 4294967296 ya da 0-65535 aralığında alırsınız. Aşağıda verilen dönüştürme işlevleri, Long ve aynı zamanda bir imzasız Long girdi ve görüntüleme amacıyla bir çift için veya diğer hesaplamaları işaretsiz bir tamsayı dönüştürün.

Dört işlevler şunlardır:
UnsignedToLong
LongToUnsigned
UnsignedToInteger
IntegerToUnsigned

UnsignedToLong

Işlev bir değer aralığında imzasız içeren bir çift alır uzun ve imzasız gerektiren bir APı'SINE geçirebilirsiniz Long döndürür Long.

LongToUnsigned

Işlev imzasız alır uzun bir APı'den ve ekran veya aritmetik amacıyla bir çift dönüştürür.

UnsignedToInteger

Işlev, işaretsiz bir tamsayı aralığında bir değer içeren bir Long alır ve imzalanmamış bir tamsayı gerektiren bir APı'SINE geçirebilirsiniz bir tamsayı döndürür.

IntegerToUnsigned

Işlev bir gelen imzasız tamsayı ve API ve ekran veya aritmetik amacıyla Long dönüştürür.
   Declare Function MyAPI Lib "xxx" (Value As Long) As Long
   Dim uResult As Long
   uResult = MyAPI(UnsignedToLong(3300000000))
   Debug.Print "Return Code: " & LongToUnsigned(uResult)
				
MyAPI API imzasız kabul Yukarıdaki örnekte, Long olarak bir parametre ve imzasız kod uzun sonuç olarak verir. DECLARE deyimi kullanır, VBA, yalnızca imzalı Longs anladığı çünkü Longs imzalanmış. The UnsignedToLong
function converts a number outside the range of signed Long (but within the
				
aralığı imzasız Long) içinde imzalı bir amacıyla API çağrılıyor Long. LongToUnsigned işlevi ters dönüşüm yapar.

Bu işlevler giriş bağımsız değişkeni olarak belirtilen zorunda imzalı bir Long, bu durumda-994967296 ve dönüş değeri imzalı bir değer olarak, belki de negatif olarak görüntülenecek yoktur numara ve sezgisel olmayan.

Adım adım örnek

  1. Yeni bir VBA projesi oluşturun.
  2. Modül için aşağıdaki kodu ekleyin:
          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. Yalnızca Visual Basic: projeyi çalıştırın ve bu duraklayın.
  4. Hemen/hata ayıklama penceresinde aşağıdakileri yazın:
          ?UnsignedToLong(3300000000)
          ?LongToUnsigned(-55)
          ?UnsignedToInteger(45000)
          ?IntegerToUnsigned(-3000)
  5. Aşağıdaki sonuçları alırsınız:
    -994967296
    4294967241
    -20536
    62536

Referanslar

Ek bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
112673  (http://support.microsoft.com/kb/112673/EN-US/ ) Pass ve iade için'tamsayılar DLL'lere VB nasıl imzalanmamış

Bu makaledeki bilginin uygulandığı durum:
  • 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
Anahtar Kelimeler: 
kbmt kbhowto KB189323 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:189323  (http://support.microsoft.com/kb/189323/en-us/ )