Преобразование из восьмеричного в двоичный в vb.net

Я хочу преобразовать восьмеричное число в двоичное для целей, связанных с моей авионикой (в частности, с транспондерами). Я делаю vb.net в свободное время, учусь самостоятельно. Но для этого я не уверен, как это сделать, даже после того, как погуглил.

Вот как я это настроил: form1

Вот весь код, который у меня есть. Это значит, что можно ввести только цифры 1-7:

Public Class Form1    
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    If Asc(e.KeyChar) <> 8 Then
        If Asc(e.KeyChar) < 48 Or Asc(e.KeyChar) > 55 Then
            e.Handled = True
        End If
    End If
End Sub
End Class

Я не уверен, как преобразовать Textbox1.text в двоичный файл, а затем разделить его на следующие текстовые поля для A, B, C, D.

Пример: У вас есть A4, A2 и A1 (000). Те добавляют к 7 (111). Это повторяется для B, C и D.

Итак, чтобы подвести итог, я хочу преобразовать восьмеричное число в двоичное и, если смогу, разделить его на отдельные поля, соответствующие буквам.

Вот как это должно выглядеть (нельзя размещать более 2-х ссылок): 2134 = A4,2,1(010) B4,2,1(001) C4,2,1(011) D4,2,1(100 )

Изменить: я пробовал Convert.ToString(#NUMBER, 2), но он возвращает неправильный двоичный код. 7631 возвращает 1110111001111, но должно быть 111110011001. См. http://ncalculators.com/digital-computation/binary-octal-converter.htm


person Spencer    schedule 09.10.2015    source источник
comment
Возможный дубликат строк BigInteger to Hex/Decimal/Octal/Binary?   -  person sujith karivelil    schedule 09.10.2015


Ответы (1)


Чтобы преобразовать восьмеричную строку в двоичную строку:

Private Function OctToBin(octal As String) As String
    Return Convert.ToString(Convert.ToInt32(octal, 8), 2)
End Function

Чтобы преобразовать двоичную строку в массив трехсимвольных подстрок:

Private Function ToBinBytes(binary As String) As String()
    Dim chars = binary.Reverse().ToArray()
    Dim binBytes As New List(Of String)

    Do While chars.Length > 0
        Dim byteChars = chars.Take(3).Reverse().ToArray()

        binBytes.Add(New String(byteChars).PadLeft(3, "0"c))
        chars = chars.Skip(3).ToArray()
    Loop

    Return binBytes.AsEnumerable().Reverse().ToArray()
End Function

Оба не проверены, но я думаю, что они правы.

Протестировано с этим кодом:

Dim n = 1234567
Dim o = Convert.ToString(n, 8)
Dim b = OctToBin(o)

MessageBox.Show((n = Convert.ToInt32(b, 2)).ToString())
MessageBox.Show(String.Join(Environment.NewLine, ToBinBytes(b)), b)
person jmcilhinney    schedule 09.10.2015
comment
Извините, не заметил, как вы его редактировали. Но я получаю неправильное преобразование, если я не делаю что-то не так. Пример: 1000 равно 4000 Private Sub Button1_Click(sender As Object, e As EventArgs) HandlesButton1.Click Dim str As String Dim str2 As String() str = OctToBin(TextBox1.Text) str2 = ToBinBytes(str) TextBox2.Text = str2(0) TextBox3.Text = str2(1) TextBox4.Text = str2(2) TextBox5.Text = str2(3) TextBox6.Text = str2(0) + str2(1) + str2(2) + str2(3) End Sub - person Spencer; 09.10.2015
comment
Я не получил исключения, которое вы сделали, но я нашел ошибку в ToBinBytes, которая теперь исправлена. Я тестировал, как показано в примере. - person jmcilhinney; 09.10.2015