2009-03-18 11 views
7

Czy istnieje sposób przypisania wartości binarnej do zmiennej VB? Wszystkie oczywiste wybory nie działają. Próbowałem przedrostka z &B, dołączając z b, ale nic nie działa. Nie mam też wiele szczęścia, żeby go szukać. Nie muszę potrzebuję tego dla mojej aplikacji, ale raczej jestem po prostu ciekawy, więc alternatywne rozwiązania nie są konieczne.Przypisywanie stałej binarnej

[Edytuj] Dla wyjaśnienia, czego szukałem (co nie wydaje się możliwe) było jak przypisać literalną liczbę binarną do zmiennej, w podobny sposób, w jaki można przypisać heksadecymalny lub ósemkowy numer. Po prostu szukałem bardziej wciągającego wizualnie sposobu przypisania wartości do enum flagi.

Kod:

Dim num as Integer = &H100ABC  'Hex' 
Dim num2 as Integer = &O123765  'Octal' 

Dim myFantasy as Integer = &B1000 'What I would like to be able to do' 
Dim myReality as Integer = 2^3 'What I ended up doing' 
+0

Możliwy duplikat [Jak wpisać literał binarne w VB.NET?](http://stackoverflow.com/questions/1417662/how-do-i-type-literal-binary-in-vb -net) – Darren

Odpowiedz

17

mogę przebić się po tej jednej:

Convert.ToInt32("1100101", 2); 

Na bardziej poważne uwaga (zauważając, że zaktualizowałeś pytanie), dla flagi enums, czego możesz potrzebować, jest left shift operator (<<):

Dim myReality as Integer   = 1 << 0 // 1 
Dim myAlternateReality as Integer = 1 << 1 // 2 
Dim myParallelUniverse as Integer = 1 << 2 // 4 
... 

i tak dalej, aż do 31.

+0

+1 - aby uzyskać poprawną odpowiedź. Dał mi chichot, dzięki :) –

+0

+1 "biegnie wyjąc w noc" –

3

Niestety, to najlepsze co możesz zrobić, to Hex:

Dim x As Long = &H1234ABCD 
2

Zakładam, że to co John Rasch dały odpowiedź na. Masz ciąg złożony z zer i jedynek, które chcesz przekonwertować na jakąś zmienną.

Dim b As String = "10101" 
    Dim i As Integer = 73 
    Dim s As String 
    s = Convert.ToString(i, 2) 's contains the binary representation of 73 - 1001001 
    i = Convert.ToInt32(b, 2) 'i now = 21 

i można również użyć tych metod dla heksadecymalnych (16) i ósemkowych (8).

można też zrobić coś takiego

Dim i As Integer = 6 
    If (i And _bi.t0) = _bi.t0 OrElse (i And _bi.t1) = _bi.t1 Then 
     'bit 0 or 1 on 
    End If 

Enum _bi As Integer 
    t0 = CInt(2^0) 
    t1 = CInt(2^1) 
    t2 = CInt(2^2) 
    t3 = CInt(2^3) 
    t4 = CInt(2^4) 
    t5 = CInt(2^5) 
    t6 = CInt(2^6) 
    t7 = CInt(2^7) 
    t8 = CInt(2^8) 
    t9 = CInt(2^9) 
    t10 = CInt(2^10) 
    t11 = CInt(2^11) 
    t12 = CInt(2^12) 
    t13 = CInt(2^13) 
    t14 = CInt(2^14) 
    t15 = CInt(2^15) 
    t16 = CInt(2^16) 
    t17 = CInt(2^17) 
    t18 = CInt(2^18) 
    t19 = CInt(2^19) 
    t20 = CInt(2^20) 
    t21 = CInt(2^21) 
    t22 = CInt(2^22) 
    t23 = CInt(2^23) 
    t24 = CInt(2^24) 
    t25 = CInt(2^25) 
    t26 = CInt(2^26) 
    t27 = CInt(2^27) 
    t28 = CInt(2^28) 
    t29 = CInt(2^29) 
    t30 = CInt(2^30) 
End Enum 
1

lub coś opisowe

Enum _SerialPortPins As Integer 
    RTS = CInt(2^4) 
    CTS = CInt(2^5) 
    DSR = CInt(2^6) 
    DCD = CInt(2^8) 
    DTR = CInt(2^20) 
    RI = CInt(2^22) 
End Enum 
1

Zastosowanie komentarz?

Dim myFantasy as Integer = 2^3 '00000000-00001000