Назначение двоичной константы - PullRequest
7 голосов
/ 18 марта 2009

Есть ли способ присвоить двоичное значение переменной VB? Все очевидные варианты не работают. Я пробовал префикс с &B, добавляя с b, но ничего не работает. Мне тоже не повезло в поисках. Мне не нужно это для моего приложения, но мне просто любопытно, поэтому альтернативные решения не нужны.

[Изменить] Для пояснения, то, что я искал (что, по-видимому, невозможно), было то, как назначить буквенное двоичное число переменной, аналогичным образом, в котором вы можете назначить шестнадцатеричное или восьмеричное число. Я просто искал более привлекательный способ присвоения значений перечислению флага.

Код:

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'

Ответы [ 5 ]

17 голосов
/ 18 марта 2009

Я мог бы зарезать себя после этого:

Convert.ToInt32("1100101", 2);

На более серьезной ноте (отметив, что вы обновили вопрос) для флага enums вам может потребоваться оператор смещение влево (<<) :

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

и т. Д. До 31.

3 голосов
/ 18 марта 2009

К сожалению, лучшее, что вы можете сделать, это Hex:

Dim x As Long = &H1234ABCD
2 голосов
/ 19 марта 2009

Полагаю, вы имеете в виду то, на что Джон Раш дал ответ. У вас есть строка, состоящая из нулей и единиц, которые вы хотите преобразовать в какую-то переменную.

    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

, и вы также можете использовать эти методы для hex (16) и восьмеричного (8).

Вы также можете сделать что-то вроде этого

    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 голос
/ 20 марта 2009

Использовать комментарий?

Dim myFantasy as Integer = 2^3 '00000000-00001000
1 голос
/ 20 марта 2009

или что-то описательное

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
...