Ir ao conteúdo

Converter Decimal em Hexadecimal usando C


Marcelo Miguel

Posts recomendados

Postado

Se puderem ajudar, agradeço...

Este trecho de código converte número decimal passado via parâmetro em hexadecimal, não sei se funciona para qualquer número, mas testei vários e até agora e deu certo.

O problema é o seguinte:

Se digitar o numero decimal 192, em hexadecimal fica = 12 0.

Está certo o resultado, porém o 12 em hexadecimal corresponde à letra C

Então o resultado correto para 192, em hexadecimal seria = C 0

/* Função converte decimal em hexadecimal. */	 
void Decimal_em_Hexadecimal( int num )
{
int i, j;
int quociente;

i = 0;

int resto[ i ];

quociente = num / 16;
resto[ i ] = num % 16;

while ( quociente >= 16 )
{
i++;
resto[ i ] = quociente % 16;
quociente = quociente / 16;
}
if ( quociente < 16 )
{
switch(quociente)
{
case 10 : (char)quociente; break;
case 11 : (char)quociente; break;
case 12 : (char)quociente; break;
case 13 : (char)quociente; break;
case 14 : (char)quociente; break;
case 15 : (char)quociente; break;
}
i++;
resto[ i ] = quociente;
}
printf ( "\nConversao de %d em Hexadecimal = ",num);
for ( ; i >= 0; i-- )
printf ( "%d ", resto[ i ] );

printf ( "\n\n" );
}

Postado
q tal você ler com com %d e imprimir com %x??? Esse programa só tem cunho didatico, certo??

Sim, só cunho didático. Usando o operador %x obtenho o resultado em hexadecimal de um número lido como decimal %d.

Postado

só uma ideia : 256/16=16, resto 0

16/16=1, resto 0

1/16=0, resto 1

logo, 256(base10)=100(base16)

Quanto ao problema com conversão, é só fazer o seguinte : 196

196/16=12, resto 4;

12/16=0, resto 12;

seria : (12)(4)=C4;

É só pegar cada resto e transformar a partir do 10.

tipo if(resto>=10) switch(resto){case 10: printf("A"); break; case 11: printf("B"); break;(etc, etc)}

Caso contrario "printava" o número mesmo.

Só uma ideia pincelada

Postado
só uma ideia : 256/16=16, resto 0

16/16=1, resto 0

1/16=0, resto 1

logo, 256(base10)=100(base16)

Quanto ao problema com conversão, é só fazer o seguinte : 196

196/16=12, resto 4;

12/16=0, resto 12;

seria : (12)(4)=C4;

É só pegar cada resto e transformar a partir do 10.

tipo if(resto>=10) switch(resto){case 10: printf("A"); break; case 11: printf("B"); break;(etc, etc)}

Caso contrario "printava" o número mesmo.

Só uma ideia pincelada

 void Decimal_em_Hexadecimal( int num )	 
{
int i, j;
int quociente;

i = 0;

int resto[ i ];

quociente = num / 16;
resto[ i ] = num % 16;

while ( quociente >= 16 )
{
i++;
resto[ i ] = quociente % 16;
quociente = quociente / 16;
}
i++;
resto[ i ] = quociente;

printf ( "\nConversao de %d em Hexadecimal = ", num);
for ( ; i >= 0; i-- )

if ( resto[ i ] >= 10 )
switch( resto[ i ] )
{
case 10 : printf ( "A" ); break;
case 11 : printf ( "B" ); break;
case 12 : printf ( "C" ); break;
case 13 : printf ( "D" ); break;
case 14 : printf ( "E" ); break;
case 15 : printf ( "F" ); break;
}
else
printf ( "%d", resto[ i ] );

printf ( "\n\n" );
}

Obrigado pela dica, não tinha pensado desta maneira, ficou bom, tá rodando legal. Seria bem mais fácil usar %x, mas temos que quebrar a cabeça de vez em quando para desenvolver nossa lógica. Valeu!!!

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!