Este conversor es solo una práctica, no es nada serio y aún se podría mejorar mucho. Tanto a nivel de presentación, como a nivel de código.
' gambas class file
' Programa muy sencillo, pero que ilustra el uso de cosas interesantes
' tales como Bin$, Hex$, CInt, Mid$, definición de un array unidimensional
' así el manejo de radiobuttom en gambas, que difiere un poco del manejo de VB
' paso de valores a funciones, retorno y captura de resultados
' tambien incluye el uso de imágenes en los botones :)
Public Function conv_bin(valor As String, base_sel As Integer) As String
' Dado que el valor es recibido como string, debe ser convertido a entero
' con CInt, para que Bin$ lo pueda convertir a binario, luego de eso,
' Str lo convertirá nuevamente a string, para devolverlo con Return
Dim resp As String
If base_sel = 10 Then
resp = Str(Bin$(CInt(valor)))
Endif
Return resp
End
Public Function conv_dec(valor As String, base_sel As Integer) As String
' Al igual que en las demás funciones se recibe un valor en forma de cadena
' pero esta vez se hacen algunos extras.
' Se crean las variables que serviran para operar tanto el arreglo (array),
' como el orden del polinomio resultante, que será de grado k
' x se usa para extraer un caracter de la cadena denominada valor
' m es el coeficiente asociado a un termino de acuerdo a su posición en la cadena "valor"
' en este caso creamos un arreglo (array) de tamaño fijo ya que es para ser llenado
' con los valores hexadecimales del 0 al 15, por tanto son 16 elementos.
Dim resp As String
Dim i, j, k, l, m, x As Integer
Dim lista As New String[16]
x = Len(valor)
k = x - 1
j = 0
l = 0
If base_sel = 2 Then
For i = 1 To x
If Mid$(valor, i, 1) = "1" Then
j = j + (2 ^ k)
Endif
k = k - 1
Next
resp = Str(j)
Else
For i = 0 To 15
lista[i] = (Hex$(i))
Next
For i = 1 To x
For m = 0 To 15
If Mid$(Upper(valor), i, 1) = lista[m] Then
j = j + m * (16 ^ k)
Endif
Next
k = k - 1
Next
resp = Str(j)
Endif
Return resp
End
Public Function conv_hex(valor As String, base_sel As Integer) As String
' Dado que el valor es recibido como string, debe ser convertido a entero
' con CInt, para que Hex$ lo pueda convertir a hexadecimal, luego de eso,
' Str lo convertirá nuevamente a string, para devolverlo con Return
Dim resp As String
Dim i, j, k, x As Integer
If base_sel = 10 Then
resp = Str(Hex$(CInt(valor)))
Else
Endif
Return resp
End
Public Sub btn_ok_Click()
' esta sección se creo para poder manejar y presentar los resultados
' en la forma.
If rb_dec.Value Then
Label5.Text = conv_bin(TextBox1.Text, 10)
Label6.Text = conv_hex(TextBox1.Text, 10)
Endif
If rb_bin.Value Then
Label4.Text = conv_dec(TextBox1.Text, 2)
Label6.Text = conv_hex(Label4.Text, 10)
Endif
If rb_hex.Value Then
Label4.Text = conv_dec(TextBox1.Text, 16)
Label5.Text = conv_bin(Label4.Text, 10)
Endif
End
Public Sub btn_cancel_Click()
' cierra la forma (form) o ventana
FMain.Close()
End
Public Sub TextBox1_GotFocus()
' limpia las etiquetas (labels), para evitar basura en la forma
Label4.text = ""
Label5.Text = ""
Label6.Text = ""
End
' Programa muy sencillo, pero que ilustra el uso de cosas interesantes
' tales como Bin$, Hex$, CInt, Mid$, definición de un array unidimensional
' así el manejo de radiobuttom en gambas, que difiere un poco del manejo de VB
' paso de valores a funciones, retorno y captura de resultados
' tambien incluye el uso de imágenes en los botones :)
Public Function conv_bin(valor As String, base_sel As Integer) As String
' Dado que el valor es recibido como string, debe ser convertido a entero
' con CInt, para que Bin$ lo pueda convertir a binario, luego de eso,
' Str lo convertirá nuevamente a string, para devolverlo con Return
Dim resp As String
If base_sel = 10 Then
resp = Str(Bin$(CInt(valor)))
Endif
Return resp
End
Public Function conv_dec(valor As String, base_sel As Integer) As String
' Al igual que en las demás funciones se recibe un valor en forma de cadena
' pero esta vez se hacen algunos extras.
' Se crean las variables que serviran para operar tanto el arreglo (array),
' como el orden del polinomio resultante, que será de grado k
' x se usa para extraer un caracter de la cadena denominada valor
' m es el coeficiente asociado a un termino de acuerdo a su posición en la cadena "valor"
' en este caso creamos un arreglo (array) de tamaño fijo ya que es para ser llenado
' con los valores hexadecimales del 0 al 15, por tanto son 16 elementos.
Dim resp As String
Dim i, j, k, l, m, x As Integer
Dim lista As New String[16]
x = Len(valor)
k = x - 1
j = 0
l = 0
If base_sel = 2 Then
For i = 1 To x
If Mid$(valor, i, 1) = "1" Then
j = j + (2 ^ k)
Endif
k = k - 1
Next
resp = Str(j)
Else
For i = 0 To 15
lista[i] = (Hex$(i))
Next
For i = 1 To x
For m = 0 To 15
If Mid$(Upper(valor), i, 1) = lista[m] Then
j = j + m * (16 ^ k)
Endif
Next
k = k - 1
Next
resp = Str(j)
Endif
Return resp
End
Public Function conv_hex(valor As String, base_sel As Integer) As String
' Dado que el valor es recibido como string, debe ser convertido a entero
' con CInt, para que Hex$ lo pueda convertir a hexadecimal, luego de eso,
' Str lo convertirá nuevamente a string, para devolverlo con Return
Dim resp As String
Dim i, j, k, x As Integer
If base_sel = 10 Then
resp = Str(Hex$(CInt(valor)))
Else
Endif
Return resp
End
Public Sub btn_ok_Click()
' esta sección se creo para poder manejar y presentar los resultados
' en la forma.
If rb_dec.Value Then
Label5.Text = conv_bin(TextBox1.Text, 10)
Label6.Text = conv_hex(TextBox1.Text, 10)
Endif
If rb_bin.Value Then
Label4.Text = conv_dec(TextBox1.Text, 2)
Label6.Text = conv_hex(Label4.Text, 10)
Endif
If rb_hex.Value Then
Label4.Text = conv_dec(TextBox1.Text, 16)
Label5.Text = conv_bin(Label4.Text, 10)
Endif
End
Public Sub btn_cancel_Click()
' cierra la forma (form) o ventana
FMain.Close()
End
Public Sub TextBox1_GotFocus()
' limpia las etiquetas (labels), para evitar basura en la forma
Label4.text = ""
Label5.Text = ""
Label6.Text = ""
End
Pero para aquellos que como yo, nos estamos poniendo en forma aprendiendo y recordando ....
Por ahí va. Dentro de las posibles mejoras al código estaría el unificarlo para que use debidamente la base seleccionada, ya que el algoritmo es el mismo, para convertir de bin - dec y hex - dec.
También se podría, organizar mejor los controles dentro de la ventana para ahorrar espacio y hacerlos adaptables por si se maximiza.
Bueno ahí está ... saludos