Função para conversão de bases

Programar é tudo de bom. Naqueles dias de depressão então, nem se fale. Se achar a solução para um problema antigo, até a depressão resolve ir embora.

Foi numa dessas enrascadas que só os programadores são capazes de se encontrar que este código surgiu. A long time ago, tive a necessidade de fazer um pequeno programa que convertesse um número em um dado alfanumérico. Tudo para manter a compatibilidade entre dois sistemas.

Baseado na regra de conversão de bases, surgem duas funções. Com este código dá para converter qualquer número em qualquer base, muito simples. No meu caso, usei base 36 (26 letras + 10 algarismos). O código está em VBA (Visual Basic for Applications), da época que eu me aventurei a programas em Access.

Public Function BaseNParaDecimal(VALOR As String, Base As Integer) As Integer
    Dim N, I As Integer
    Dim Caractere As String

    N = Len(VALOR)
    For I = N - 1 To 0 Step -1
        Caractere = Mid(VALOR, (N - I), 1)
         If ((Asc(Caractere) > 64) And (Asc(Caractere) < 91)) Then
            Caractere = Asc(Caractere) - 55
        Else
            Caractere = Asc(Caractere) - 48
        End If
        BaseNParaDecimal = BaseNParaDecimal + Base ^ I * Caractere
     Next I
End Function
Public Function DecimaParaBaseN(VALOR As Integer, Base As Integer) As String
    Dim TempValor As Integer
    Dim Algarismo As String

    TempValor = VALOR
    TempValor = TempValor \ Base
    If (TempValor > 0) Then
         DecimaParaBaseN = DecimaParaBaseN & DecimaParaBaseN(TempValor, Base)
    End If
    Algarismo = VALOR Mod Base
    If (Algarismo > 9) Then
        Algarismo = Chr(55 + Algarismo)
    End If
     DecimaParaBaseN = DecimaParaBaseN & Algarismo
End Function
Limites do Access 2007:
Int: 32767 (2 Bytes menos bit de sinal)
Long: 2147483647 (4 Bytes menos bit de sinal)

Por que resolvi postar este código aqui? Porque não encontrei solução na web quando precisei e, se precisar novamente, sei onde encontrar. Não custa nada ajudar algum outro necessitado também. 😉

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s