VB .NET - Conversão Numérica : Binária, Decimal, Octal e Hexadecimal


Neste artigo eu vou mostrar como fazer conversões numéricas usando a linguagem VB .NET.

Vamos realizar conversões numéricas entre os formatos: binário, decimal, hexadecimal e octal.

Recursos usados:

Abra o VB 2010 Express e crie um novo projeto do tipo Windows Forms Application com o nome ConversaoNumericas;

Inclua uma classe no projeto via menu Project -> Add Class com o nome ConversorNumerico e inclua o código abaixo nesta classe:

Public Class ConversorNumerico

    ' Converte o binario para long
    Public Function BinaryToLong(ByVal valor_binario As String) As Long
        ' Remove qualquer &B se existir
        valor_binario = valor_binario.Trim().ToUpper()
        If valor_binario.StartsWith("&B") Then valor_binario = valor_binario.Substring(2)

        ' remove os espaços no caso de bytes separados por espaços
        valor_binario = valor_binario.Replace(" ", "")

        ' preenche a esquerda com zeros 
        valor_binario = New String("0", 64 - valor_binario.Length) & valor_binario

        ' le os bits da esquerda para direita
        Dim hex_resultado As String = ""

        For nibble_num As Integer = 0 To 15
            ' Converte para string hexadecimal
            Dim fator As Integer = 1
            Dim nibble_value As Integer = 0

            For bit As Integer = 3 To 0 Step -1
                If valor_binario.Substring(nibble_num * 4 + bit, 1).Equals("1") Then
                    nibble_value += fator
                End If
                fator *= 2
            Next bit

            hex_resultado &= nibble_value.ToString("X")
        Next nibble_num
        ' Converte o resultado string em um long
        Return Long.Parse(hex_resultado, Globalization.NumberStyles.HexNumber)
    End Function

    Public Function LongToBinary(ByVal valor_long As Long, Optional ByVal bytes_separados As Boolean = True) As String
        ' Converte em hexa.
        Dim hex_string As String = valor_long.ToString("X")

        ' preenche com zero a esquerdas com 16 characters.
        hex_string = New String("0", 16 - hex_string.Length) & hex_string

        ' le os digitos hexadecimal um de cada vez da esquerda para direita
        Dim resultado_string As String = ""
        For digito_numero As Integer = 0 To 15
            ' Converte o digito hexadecimal para binario
            Dim digito_valor As Integer = Integer.Parse(hex_string.Substring(digito_numero, 1), Globalization.NumberStyles.HexNumber)

            ' Converte o valor em  bits
            Dim fator As Integer = 8
            Dim nibble_string As String = ""
            For bit As Integer = 0 To 3
                If digito_valor And fator Then
                    nibble_string &= "1"
                Else
                    nibble_string &= "0"
                End If
                fator \= 2
            Next bit

            ' inclui a string a esquerda do resultado
            resultado_string &= nibble_string
        Next digito_numero

        ' adiciona espacços entre os bytes se quiser
        If bytes_separados Then
            Dim tmp As String = ""
            For i As Integer = 0 To resultado_string.Length - 8 Step 8
                tmp &= resultado_string.Substring(i, 8) & " "
            Next i
            resultado_string = tmp.Substring(0, tmp.Length - 1)
        End If

        ' Returna o resultado
        Return "&B" & resultado_string
    End Function
End Class

Nesta classe temos dois métodos que realizam a conversão de binário para decimal e vice-versa.

No formulário padrão fom1.vb do projeto inclua 4 controles Labels e 4 controles textBox conforme leiaute abaixo:

Agora inclua o código abaixo neste formulário:

Public Class Form1

    Dim conversor As New ConversorNumerico()

    Private Sub ExibirValores(ByVal source As TextBox)
        ' não chamar recursiavmente
        Static ignorar_eventos As Boolean = False

        If ignorar_eventos Then Exit Sub

        ignorar_eventos = True

        ' Pegar o valor
        Dim txt As String
        Dim value As Long

        Try
            Select Case source.Name
                Case "txtDecimal"
                    value = Long.Parse(source.Text)
                Case "txtHexadecimal"
                    txt = UCase(Trim(source.Text))
                    If txt.StartsWith("&H") Then txt = txt.Substring(2)
                    value = Long.Parse(txt, Globalization.NumberStyles.HexNumber)
                Case "txtOctal"
                    txt = UCase(Trim(source.Text))
                    If Not txt.StartsWith("&O") Then txt = "&O" & txt
                    value = CLng(txt)
                Case "txtBinary"
                    value = conversor.BinaryToLong(source.Text)
            End Select
        Catch ex As Exception
            MessageBox.Show("Erro ao converter valor" & vbCrLf & ex.Message, "Erro : ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try

        ' exibe o avlor em diferentes formatos
        If source.Name <> "txtDecimal" Then
            txtDecimal.Text = value.ToString()
        End If
        If source.Name <> "txtHexadecimal" Then
            txtHexadecimal.Text = value.ToString("X")
        End If
        If source.Name <> "txtOctal" Then
            txtOctal.Text = "&O" & Oct$(value)
        End If
        If source.Name <> "txtBinario" Then
            txtBinario.Text = conversor.LongToBinary(value)
        End If

        ignorar_eventos = False
    End Sub

    Private Sub txtValor_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtDecimal.TextChanged, _
 txtHexadecimal.TextChanged, txtOctal.TextChanged, txtBinario.TextChanged
        ExibirValores(sender)
    End Sub
End Class

Estamos usando o evento TextChanged dos controles TextBox de forma que à medida que o usuário digita o valor a rotina ExibirValores() é chamada e os valores são convertidos nos formatos tratados.

Executando o projeto teremos o seguinte resultado:

Pegue o projeto completo aqui: ConversaoNumerica.zip

Veja os Destaques e novidades do SUPER CD VB 2013 (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# 2013 com exclusivo material de suporte e vídeo aulas com curso básico sobre C#.

Rom 10:16 Mas nem todos deram ouvidos ao evangelho; pois Isaías diz: Senhor, quem deu crédito à nossa mensagem?

Rom 10:17 Logo a fé é pelo ouvir, e o ouvir pela palavra de Cristo.

Referências:


José Carlos Macoratti