Ir para conteúdo

POWERED BY:

Arquivado

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

Elton M. Távora

Hexadecimal para Decimal.

Recommended Posts

Galera...

Estou querendo fazer a conversão de um número hexadecimal para decimal. (Trabalho da faculdade)

Quero usar a linguagem C.

O problema que estou me deparando é no valor de entrada digitado pelo usuário, ou seja, no numero decimal.

Que tipo de variável eu posso usar para ele ler números e letras?

Exemplo: O usuário digita o valor "1C8" para ser convertido.

Na minha idéia o sistema terá que fazer a leitura desse valor DIGITO POR DIGITO.

Então eu colocaria um SE.

Se 1 então uma variável recebe 1.

Se C então uma variável recebe 12.

Se 8 então uma variável recebe 8.

Pronto. Com esse valores guardados após o "SE" (1, 12 e 8) eu iria conseguir realizar a conversão.

 

Quero saber se existe uma variável que possa receber o valor do usuário e ler cada posição para depois realizar a conversão.

Ou não tenho como fazer isso dessa maneira?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema que estou me deparando é no valor de entrada digitado pelo usuário, ou seja, no numero decimal.

não entendi.. 1C8 não é decimal...

acho que você quis dizer hexadecimal

 

você pode usar um array de integers para fazer a conversão na mão...

mas se a intenção é apenas mostrar os números na tela, exempo:

input:
54CA2

output:
54CA2 = 347298

é muuuuito simples

da uma olhada:

unsigned long long i

	printf("Digite um valor em hexadecimal: ");
	scanf("%x%*c", &i);
	printf("Convertendo...\n");
	printf("%x = %d\n", i, i);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, mas o trabalho da faculdade é fazer essa conversão calculando mesmo.

O calculo é simples.

Mas que quero fazer é o seguinte:

 

Quando o usuário digitar o valor hexadecimal (Ex: 1C8) esse valor será colocado em uma variável. Até aí tudo bem.

 

Então... Quero saber como posso fazer para o sistema ler DIGITO POR DIGITO.

ou seja

ler 1

ler C

ler 8

Tipo uma matriz.

aí eu faço o meu "Se"

 

Se 1 então uma variável recebe 1.

Se C então uma variável recebe 12.

Se 8 então uma variável recebe 8.

 

Pois com esses valores (1, 12, 8) eu consigo realizar a conversão.

Deu para entender direitinho?

 

 

 

 

O problema que estou me deparando é no valor de entrada digitado pelo usuário, ou seja, no numero decimal.

não entendi.. 1C8 não é decimal...

acho que você quis dizer hexadecimal

 

você pode usar um array de integers para fazer a conversão na mão...

mas se a intenção é apenas mostrar os números na tela, exempo:

input:
54CA2

output:
54CA2 = 347298

é muuuuito simples

da uma olhada:

unsigned long long i

	printf("Digite um valor em hexadecimal: ");
	scanf("%x%*c", &i);
	printf("Convertendo...\n");
	printf("%x = %d\n", i, i);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fazer a conversão dessa forma será bem mais complicado...

o tamanho de digitos que o usuário pode digitar é predefinido??

 

nós vamos precisar de um número variável de variáveis então....

um dynamic array resolve o nosso problema facilmente....

você está restrito a codificar em C ou pode usar C++?? Em C++ temos a classe std::vector que também fará o serviço.

 

cara, eu não entendi muito bem qual a sua dúvida ainda....

mas eu fiz uma funçãozinha rápida pra você....

ela retorna um array com n elementos, onde n é igual ao tamanho da string inicial.

 

se você entrar com "3A4F" ela retornará um array: "3, 10, 4, 15"

 

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

int* quebraStringX(char*);

int main()
{
int i, *n;
char nmbr[15];

		printf("Digite um numero hexadecimal: ");
		scanf("%s%*c", nmbr); //se não entender isso, procure pelo tópico "system("pause") e fflush(stdin)", ele está como destaque
		n = quebraStringX(nmbr);
		i=0;
		while (i < strlen(nmbr))
		{
			printf("%d - ", n[i]);
			i++;
		}
		free(n);

	return 0;
}

int* quebraStringX(char* string)
{
int *rr, i;
int len;

	len = strlen(string);
	//aloca-se memória para o array
	rr = (int*)malloc(len*sizeof(int));

	for (i=0; i<len; i++)
	{
		//se for um número decimal, apenas converte de string para int
		if (string[i] >= '0' && string[i] <= '9')
			rr[i] = (int)string[i] - (int)'0'; //conversão "rudimentar"... se não entender, pegue uma tabela ASCII
		else
		{
			//se não for um número decimal, há 6 opções...
			switch(toupper(string[i]))
			{
				case 'A': rr[i] = 10; break;
				case 'B': rr[i] = 11; break;
				case 'C': rr[i] = 12; break;
				case 'D': rr[i] = 13; break;
				case 'E': rr[i] = 14; break;
				case 'F': rr[i] = 15; break;
				default: rr[i] = -1; break;
			}
		}
	}


	return rr;
}

existem meios mais "elegantes" de resolver esse problema, mas ai ficaria um pouco mais complicado...

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.