Foros del Web » Programación para mayores de 30 ;) » Programación General »

MASM32-pasar valor hex a string

Estas en el tema de MASM32-pasar valor hex a string en el foro de Programación General en Foros del Web. Hola a todos... A ver si alguien me puede ayudar.. Estoy haciendo un programa en MASM. Necesito pasar un valor hexadecimal a su código ASCII. ...
  #1 (permalink)  
Antiguo 19/05/2007, 12:33
 
Fecha de Ingreso: mayo-2007
Mensajes: 7
Antigüedad: 17 años
Puntos: 0
MASM32-pasar valor hex a string

Hola a todos...
A ver si alguien me puede ayudar..

Estoy haciendo un programa en MASM. Necesito pasar un valor hexadecimal a su código ASCII.

Por ejemplo:
Tengo estos bytes hexadecimales:
42 33 39 12...

Lo que quiero hacer es pasarlos a ASCII y el resultado tiene que ser éste:
34 32 33 33 33 39 31 32
He probado a utilizar la función wsprintf, pero tiene dos invonvenientes:
1) hay que pasarle un valor DWORD, no deja BYTE
2) si se encuentra con bytes 00 da como resultado cadenas erróneas

¿Alguien sabe cómo puedo hacerlo?
GRACIAS
  #2 (permalink)  
Antiguo 20/05/2007, 03:05
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: MASM32-pasar valor hex a string

Pasar DWORDs no es un problema, es lo que acepta la pila y los registros comunes son de ese tamaño. El punto esta en que queres obtener el valor de ambas "cifras" decimales, es decir por cada byte original dos bytes en ASCII.

Para hacerlo tenes que pasarle a wsprintf (siguiendo el ejemplo de tu primer numero) primero 4 y despues 2 y no 042h. Esto se logra facilmente desplazando bits y "desactivando bits".

Si tenes el 042h para obtener el 4 hacemos esto:
Código:
mov eax, 042h
shr eax, 4
Para obtener el 2 hacemos:
Código:
mov eax, 042h
and eax, 0Fh
Estos numeros estan en hex/decimal (son solo bases) y los queremos en ASCII por lo tanto les sumamos el valor de '0' (48) antes de pasarselo a wsprintfA y aca un simple ejemplo para terminar:

Código:
.data
  hex_str db 12 dup(0)
  hex_format db "%x-%x", 0
.code
main:
	mov eax, 042h
	mov ecx, eax
	shr eax, 4
	add eax, '0'
	and ecx, 0Fh
	add ecx, '0'
	invoke wsprintfA, offset hex_str, offset hex_format, eax, ecx
	invoke MessageBoxA, 0, offset hex_str, offset hex_str, 0
	ret
end main
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 21/05/2007, 15:32
 
Fecha de Ingreso: mayo-2007
Mensajes: 7
Antigüedad: 17 años
Puntos: 0
De acuerdo Re: MASM32-pasar valor hex a string

Muchísimas gracias por la explicación, me ha servido de mucha ayuda.

Al final en vez de usar wsprintf he utilizado la función que viene definida en MASM(dw2hex) y he utilizado DWORD usando lo que me has dicho con ROL en vez de SHR y va todo perfecto..

Muchas gracias Eternal Idol
  #4 (permalink)  
Antiguo 21/05/2007, 16:18
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: MASM32-pasar valor hex a string

Cita:
Iniciado por lordester Ver Mensaje
Muchísimas gracias por la explicación, me ha servido de mucha ayuda.

Al final en vez de usar wsprintf he utilizado la función que viene definida en MASM(dw2hex) y he utilizado DWORD usando lo que me has dicho con ROL en vez de SHR y va todo perfecto..
De nadas

En cuanto a rol (supongo que usaste ror), mira la diferencia con shr:
mov eax, 42h ;eax=42h
ror eax, 4 ;eax=20000004h
mov eax,42h ;eax=42h
shr eax,4 ;eax=4h

El primero rota los bits (salen por un lado y entran por el opuesto) pero el segundo desplaza los bits (salen unicamente).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:17.