[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

ascii para hexa




    * Subject: ascii para hexa
    * From: "Alexandre Pitta Guedes" <apguedes2000@xxxxxxxxxxx>
    * Date: Fri, 28 Mar 2003 14:34:15 -0300

Sem querer ser chato, mas já sendo mó mala,
eu queria saber como eu "digo" para o programa
que eu quero que o numero saia em hexa...
tipo, toda informação é guardada em hexa,
certo? 

	Errado. As informações são guardadas em binário. São os 
programadores que preferem hexa para trabalhar, porque é fácil de 
convertar números binários em hexa.

quando eu recebo o arquivo texto, ele
vai guarda-lo em hexa... como eu falo para
ele que é para devolver os dados como hexa???

	O texto é salvo em ASCII (ou, eventualmente alguma outra
codificação), mas é binário, de qualquer forma. O que voce precisa fazer é
pegar esse código binário e interpretar, obtendo os códigos ASCII
correspondentes a cada dígito da representação em hexa daquele número
binário. (nao sei se deu para entender, espero que sim).

	A conversão é fácil: você vai dividindo por 16 e pegando o resto.  
Mas como o computador é binário. Dividir por 16 é equivalente a fazer um
shift right de 4 bits. O resto da divisão por 16 é obtido com um "and 15"
(que é 00001111 em binário).

	Isso serve para você obter cada um dos "nibbles" ou digitos hexa
do número. Daí você pode pegar o código ASCII que corresponde ao dígito
hexa dado:

hexdigits db '0123456789abcdef'

.text
<...>
mov bx, hexdigits
mov al, <numero>
xlat [hex_table]   ; nao sei se tem os colchetes na notacao do NASM
; agora al contem o codigo ascii

-------------
	
	Isso equivale ao seguinte em C:

unsigned char hexdigits[] = "0123456789abcdef";

unsigned char tohexdigit(unsigned char c)
{
	return hexdigit[c];
}

-------------



Seria o contrario da função que o prof deu na aula. uma que converte ascii
para hexa.

	Infelizmente não vi essa aula, mas o que precisa, resumindo, é:

	converter binário -> hexa
	converter hexa -> ascii

	O código que eu passei acima serve para a segunda parte.

	Andre