Ir para conteúdo

Arquivado

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

JosimarNew

Conversão de Base Decimal para Hexadecimal

Recommended Posts

Então, vou postar aqui um programinha que faz conversão de base. Estou explorando agora o C/C++ e me familiarizando com a sintaxe da linguagem.

 

Estou também tendo alguns probleminhas para tratamento de String, que em C não é nada intuitivo como em outras linguagens que já mexo. Más segue abaixo o fonte do programa, no final só falta inverter agora o resultado da conversão e consertar o problemas dos caracteres sobrando.

 

Deve ter uma forma mais simples de se fazer, más estou começando com C agora.

/*
Autor: Josimar Batista Gomes
Descrição: Programa que converte numero decimal em hexadecimal
Data: 12-08-2014
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
	int numeroEntrada, q, resto;
	char exa[10], getInt[10];
	
	printf("Informe um numero para converter para EXADECIMAL\n\n");
	printf("NUMERO => ");
	scanf("%i", &numeroEntrada);
	
	
	do{
		q = numeroEntrada / 16;
		resto = numeroEntrada % 16;
		numeroEntrada /= 16;
		
		switch(resto){
			case 10:
				strcat(exa, "A");
			break;
			case 11:
				strcat(exa, "B");
			break;
			case 12:
				strcat(exa, "C");
			break;
			case 13:
				strcat(exa, "D");
			break;
			case 14:
				strcat(exa, "E");
			break;
			case 15:
				strcat(exa, "F");
			break;
			case 16:
				strcat(exa, "G");
			break;
			default:
				sprintf(getInt, "%i", resto);
				strcat(exa, getInt);
		}
	}while(q != 0);
	printf("%s", exa);
	return 0;
}

Ainda falta muito para funcionar como se deve. Não testei muito e encontrei alguns erros, más creio que a lógica segue por aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente trabalhar com string em C, inicialmente gera muita dúvida, por ter de ficar pensando em caracteres e não como string, como acontece em outras linguagens. Mas com o tempo isso vira rotina.

 

Como em C não existe o tipo string, então precisamos de uma forma para fazer com que o programa identifique o término do vetor de caracteres. Utiliza-se um carácter especial para essa finalidade, que é o '\0'.

Ele costuma ser tratado automaticamente quando utilizamos as funções da biblioteca "string.h", porém, também precisamos fazer nossa parte, para que a função não trate os valores de maneira errada, como por exemplo: Estourar a quantidade de carácteres permitidos no vetor ou retirar um carácter dele.

 

Uma forma de garantir que existirá um terminador de string no vetor quando for adicionar informação pela primeira vez, é inicializa-lo com o carácter especial em todas as posições.

Exemplo:

    char vetor[100] = {'\0'};

A lógica do seu programa está certa. Vale a atenção para a inicialização de variáveis, para evitar de trabalhar com "lixo" em memória (coisa que, em muitas outras linguagens isso ocorre automaticamente).

 

Acredito que, apenas inicializando-as, você não já não terá erros na saída da execução do programa.

 

Uma outra coisa que faltou no código, foi inverter a ordem do resultado, para poder mostrar o valor em hexa corretamente:

    for ( i = 0; i < (strlen(hexa) / 2); i++ )
    {
        tmp = hexa[i];
        hexa[i] = hexa[strlen(hexa) - i - 1];
        hexa[strlen(hexa) - i - 1] = tmp;
    }
Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

"Agora percebi, eu escrevi hexadecimal sem o H, até na declaração de minha variável. Perdão aí pela falta de atenção rsrsrsrsrs"

 

Valew amigo ScreenBlack, vou inicializar meus vetores de caracteres agora. :yes:

Qualquer dúvida ou algum outro problema posto aqui.


/*
Autor: Josimar Batista Gomes
Descrição: Programa que converte numero decimal em hexadecimal
Data: 12-08-2014
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
	int numeroEntrada, q, resto, i;
	char hexa[10] = {'\0'}, getInt[10] = {'\0'};
	
	printf("Informe um numero para converter para HEXADECIMAL\n\n");
	printf("NUMERO => ");
	scanf("%i", &numeroEntrada);
	
	
	do{
		q = numeroEntrada / 16;
		resto = numeroEntrada % 16;
		numeroEntrada /= 16;
		
		switch(resto){
			case 10:
				strcat(hexa, "A");
			break;
			case 11:
				strcat(hexa, "B");
			break;
			case 12:
				strcat(hexa, "C");
			break;
			case 13:
				strcat(hexa, "D");
			break;
			case 14:
				strcat(hexa, "E");
			break;
			case 15:
				strcat(hexa, "F");
			break;
			case 16:
				strcat(hexa, "G");
			break;
			default:
				sprintf(getInt, "%i", resto);
				strcat(hexa, getInt);
		}
	}while(q != 0);
	
	for(i=strlen(hexa); i >= 0; i--){
		printf("%c", hexa[i]);
	}
	return 0;
}

Muito bom mesmo. O problema todinho estava na inicialização de minhas variáveis.

Testei aqui e até agora nenhum bug. O programinha tá fazendo aquilo que é pra fazer rsrsrs. Valew amigo ScreenBlack pela força e já te dei 1 ponto de reputação e o código fica aí pra quem quiser otimiza-lo.

:clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

int num;

printf("Decimal: %d Hexadecimal: %02x\n", num, num & 0xFF);


Ou: printf("Decimal: %d Hexadecimal: 0x%02x\n", num, num & 0xFF);


Ou: printf("Decimal: %d Hexadecimal: %X\n", num, num & 0xF);

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.