• Lunes 18 de Noviembre de 2024, 00:47

Autor Tema:  Conversion De Hexadecimal A Ascii  (Leído 27582 veces)

karen81

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Conversion De Hexadecimal A Ascii
« en: Jueves 23 de Febrero de 2006, 03:24 »
0
Hola, no se mucho de estas funciones en visual basic pero ¿habra alguna directa que me convierta datos hexadecimales en ascii ?, es decir que si tengo por ejemplo:
el numero 41424344 me lo pase a su equivalente ascii "ABCD", y si no se puede me podrian dar alguna pista de como hacerlo

cualquier ayuda sera bienvenida


Gracias   :hola:
No basta tener buen ingenio; lo principal es aplicarlo bien.

Jose Arriagada

  • Miembro MUY activo
  • ***
  • Mensajes: 373
    • Ver Perfil
Re: Conversion De Hexadecimal A Ascii
« Respuesta #1 en: Jueves 23 de Febrero de 2006, 14:07 »
0
Aqui te doy la base de los sistemas numericos...

Sistemas numéricos
El sistema numérico que utilizamos a diario es el sistema decimal, pero este sistema no es conveniente para las máquinas debido a que la información se maneja codificada en forma de bits prendidos o apagados; esta forma de codificación nos lleva a la necesidad de conocer el cálculo posicional que nos permita expresar un número en cualquier base que lo necesitemos.

Es posible representar un número determinado en cualquier base mediante la siguiente formula:

Donde n es la posición del dígito empezando de derecha a izquierda y numerando a partir de cero. D es el dígito sobre el cual operamos y B es la base numérica empleada.

Convertir números binarios a decimales
Trabajando en el lenguaje ensamblador nos encontramos con la necesidad de convertir números del sistema binario, que es el empleado por las computadoras, al sistema decimal utilizado por las personas.

El sistema binario está basado en únicamente dos condiciones o estados, ya sea encendido (1) o apagado (0), por lo tanto su base es dos.

Para la conversión podemos utilizar la formula de valor posicional:

Por ejemplo, si tenemos el numero binario 10011, tomamos de derecha a izquierda cada dígito y lo multiplicamos por la base elevada a la nueva posición que ocupan:

Binario       : 1 1 0 0 1
Decimal:      1*20+1*21+0*22+0*23+1*24 = 1 + 2 + 0 + 0 + 16 = 19 decimal.
El carácter ^ es utilizado en computación como símbolo de potenciación y el carácter * se usa para representar la multiplicación.

Convertir números decimales a binarios
Existen varios métodos de conversión de números decimales a binarios; aquí solo se analizará uno. Naturalmente es mucho mas fácil una conversión con una calculadora científica, pero no siempre se cuenta con ella, así que es conveniente conocer por lo menos una forma manual para hacerlo.

El método que se explicará utiliza la división sucesiva entre dos, guardando el residuo como dígito binario y el resultado como la siguiente cantidad a dividir.

Tomemos como ejemplo el número 43 decimal.

43/2 = 21 y su residuo es 1

21/2 = 10 y su residuo es 1

10/2 = 5 y su residuo es 0

5/2 = 2 y su residuo es 1

2/2 = 1 y su residuo es 0

1/2 = 0 y su residuo es 1

Armando el número de abajo hacia arriba tenemos que el resultado en binario es 101011

Sistema hexadecimal
En la base hexadecimal tenemos 16 dígitos que van del 0 al 9 y de la letra A hasta la F (estas letras representan los números del 10 al 15). Por lo tanto, contamos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F.

La conversión entre numeración binaria y hexadecimal es sencilla. Lo primero que se hace para una conversión de un número binario a hexadecimal es dividirlo en grupos de 4 bits, empezando de derecha a izquierda. En caso de que el último grupo (el que quede mas a la izquierda) sea menor de 4 bits se rellenan los faltantes con ceros.

Tomando como ejemplo el número binario 101011 lo dividimos en grupos de 4 bits y nos queda:

10; 1011

Rellenando con ceros el último grupo (el de la izquierda):

0010; 1011

Después tomamos cada grupo como un número independiente y consideramos su valor en decimal:

0010 = 2; 1011 = 11

Pero como no podemos representar este número hexadecimal como 211 porque sería un error, tenemos que sustituir todos los valores mayores a 9 por su respectiva representación en hexadecimal, con lo que obtenemos:

2BH (Donde la H representa la base hexadecimal)

Para convertir un número de hexadecimal a binario solo es necesario invertir estos pasos: se toma el primer dígito hexadecimal y se convierte a binario, y luego el segundo, y así sucesivamente hasta completar el número.

Código ASCII
ASCII generalmente se pronuncia "aski", es un acrónimo de American Standard Code for Information Interchange.

Este código asigna a las letras del alfabeto, a los dígitos decimales del 0 al 9 y a varios símbolos adicionales un número binario de 7 bits (poniéndose el bit 8 en su estado de apagado o 0).

De esta forma cada letra, dígito o caracter especial ocupa un byte en la memoria de la computadora.

Podemos observar que este método de representación de datos es muy ineficiente en el aspecto numérico, ya que en formato binario nos basta un solo byte para representar numeros de 0 a 255, en cambio con el código ASCII un byte puede representar unicamente un dígito.

Debido a esta ineficiencia, el código ASCII es principalmente utilizado en la memoria para representar texto.

Metodo BCD
BCD es un acrónimo de Binary Coded Decimal.

En esta notación se utilizan grupos de 4 bits para representar cada dígito decimal del 0 al 9. Con este método podemos representar dos dígitos por byte de información.

Aœn cuando este método es mucho mas práctico para representación de números en la memoria en comparación al ASCII, todavía se queda por debajo del binario, ya que con un byte en el método BCD solo podemos representar dígitos del 0 al 99, en cambio, en formato binario podemos representar todos los dígitos desde 0 hasta 255.

Este formato es utilizado principalmente para representar números muy grandes en aplicaciones mercantiles ya que facilita las operaciones con los mismos evitando errores de redondeo.

Representación de punto flotante
Esta representación esta basada en la notación científica, esto es, representar un número en dos partes: su mantisa y su exponente.

Poniendo como ejemplo el número 1234000, podemos representarlo como 1.123*106, en esta última notación el exponente nos indica el número de espacios que hay que mover el espacio hacia la derecha para obtener el resultado original.

En caso de que el exponente fuera negativo nos estaría indicando el número de espacios que hay que recorrer el punto decimal hacia la izquierda para obtener el original.



*****************************************

Sobre esta base, y con un poco de "ingenio", es facil traspasarlo a un sistema automatizado...


Suerte

Jose Arriagada

  • Miembro MUY activo
  • ***
  • Mensajes: 373
    • Ver Perfil
Re: Conversion De Hexadecimal A Ascii
« Respuesta #2 en: Jueves 23 de Febrero de 2006, 14:21 »
0
Despues de mucho pensarlo, me da la sensacion que no llegaras a tu solucion...

Ahi te va el codigo que resuelve tu problema...

Coloca dos text (text1 y text2) y un boton (command1), e inserta el siguiente codigo


Private Sub Command1_Click()
If 2 * CInt(Len(Text1.Text) / 2) = Len(Text1.Text) Then
    Largo = Len(Text1.Text)
    msg = Empty
    For i = 1 To Largo Step 2
        msg = msg & Chr(ConvHexDec(Mid(Text1.Text, i, 2)))
    Next i
    Text2.Text = msg
End If
End Sub

Public Function ConvHexDec(ByVal sNumero As String) As Double
Largo = Len(sNumero)
inicio = Largo
Suma = 0
For i = 1 To Largo
    Digito = Mid(sNumero, i, 1)
    If IsNumeric(Digito) Then
        Valor = CInt(Digito)
    Else
        Valor = Asc(Digito) - 55
    End If
    potencia = inicio - 1
    Monto = Digito * 16 ^ potencia
    Suma = Suma + Monto
    inicio = inicio - 1
Next i
ConvHexDec = Suma
End Function

karen81

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Conversion De Hexadecimal A Ascii
« Respuesta #3 en: Viernes 24 de Febrero de 2006, 00:18 »
0
:) pues pensaste bien  
Citar
Despues de mucho pensarlo, me da la sensacion que no llegaras a tu solucion...
:rolleyes: ya tenia la informacion de los sistemas numericos gracias

y con el codigo te pasaste MUCHAS GRACIAS  :jumpie:  :kiss:  
solo que habia un pequeño error donde esta
Código: Text
  1. Monto = Digito * 16 ^ potencia
  2.  
  3.  
debe ser
Código: Text
  1. Monto = valor * 16 ^ potencia
  2.  
  3.  

Me funciona perfecto en mi aplicacion.

y otra vez  :gracias: por tomarte el tiempo


eres un  :angel:
No basta tener buen ingenio; lo principal es aplicarlo bien.

korea2006

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Conversion De Hexadecimal A Ascii
« Respuesta #4 en: Domingo 12 de Marzo de 2006, 11:29 »
0
Yo lo hago así y me funciona :smartass:

Código: Text
  1. Private Sub Command1_Click()
  2.  
  3. Dim datos As String
  4. Dim trozo As String
  5. Dim f As Byte
  6.  
  7. datos = Text1.Text
  8. 'datos = "20212223242526272829303132333435363738394041424344454647484950"
  9. For f = 0 To Len(datos)
  10. trozo = Mid(datos, f * 2 + 1, 2)
  11. Text2.Text = Text2.Text + Chr(Val("&H" + (trozo)))
  12. Next f
  13.  
  14. End Sub
  15.