C/Visual C - Conversion Hexadecimal a Decimal en C++

   
Vista:

Conversion Hexadecimal a Decimal en C++

Publicado por elpollo12 (1 intervención) el 19/05/2008 04:58:30
Buenas!! Tengo el siguiente problema... y es que en la univ me asignaron la realización de la conversion en c++ de Hexadecimal a Decimal .... bien lo pudiese hacer utilizando hex y dec de iostream, pero como es para fines educativos, el profesor nos ha dicho que no lo quiere bajo ese método. Pues bien he desarrollado el siguiente código:

#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <math.h>
main() {
char cad[1]={' '};
int c=0,n=0,tam,i,num[1];
clrscr();
cout<<"Ingrese el numero: ";
cin>>cad;
tam=strlen(cad);
for(i=tam-1; i>=0; i--) {
if(cad[i]<10 && cad[i]>0)
n=n+cad[i]*pow(16,c);
else if(cad[i]=='a') num[i]=10;
else if(cad[i]=='b') num[i]=11;
else if(cad[i]=='c') num[i]=12;
else if(cad[i]=='d') num[i]=13;
else if(cad[i]=='e') num[i]=14;
else if(cad[i]=='f') num[i]=15;
n=n+num[i]*pow(16,c);
c++; }
cout<<"El resultado es: "<<n<<endl;
getch();
return 0;
}

El problema es que me funciona bien cuando se ingresan 2 letras, por ejemplo FF = 255 ... pero cuando ingreso 2 numeros, por ejemplo 29 o un numero y una letra, como A1 no me arroja el resultado correcto. A ver si me pueden hechar una mano para detectar el problema. Muchas Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Conversion Hexadecimal a Decimal en C++

Publicado por Nelek (818 intervenciones) el 22/05/2008 03:27:57
Hola,

ten encuenta que estas usando una cadena de caracteres para almacenar la entrada de datos, por lo que cuando introduces numeros, tu primer if en el bucle nunca se ejecuta, ya que las letras que simbolizan numeros tienen un valor mayor a 1. Deberias extraer cada caracter de la cadena y comprobar si es un numero o una letra con "isalpha". Si es un numero, entonces usar la funcion "atoi" para transformarlo en un numero que puedas utilizar directamente en las operaciones aritmeticas.

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Conversion Hexadecimal a Decimal en C++

Publicado por christian martinez maldonado (2 intervenciones) el 28/09/2008 00:23:40
yo tengo la solucion de tu problema solo dame una semanita y te lo publico ya hicistes lo mas dificil ahora me toca lo mas facil salu2..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Conversion Hexadecimal a Decimal en C++

Publicado por christian martinez maldonado (2 intervenciones) el 28/09/2008 00:24:02
yo tengo la solucion de tu problema solo dame una semanita y te lo publico ya hicistes lo mas dificil ahora me toca lo mas facil salu2..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Conversion Hexadecimal a Decimal en C++

Publicado por jefferson martinez (1 intervención) el 26/08/2010 01:02:34
yo necesito el codigo hexadecimal a decimal pero en visual 2008, espero pronto la respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Conversion Hexadecimal a Decimal en C++

Publicado por manuel muñoz (1 intervención) el 23/02/2011 19:30:26
#include <iostream.h>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main ()
{
char NroHexa[100];
char Aux[2];
int i, Error;
long NroDec;
long PosMult;

printf( "Ingrese su numero Hexadecimal: " );
gets( NroHexa );

// Chequeo que los caracteres del numero sean validos
for( Error = 0, i = strlen(NroHexa) - 1; i>=0; i--)
{
if( !( ( NroHexa[i] >= 'A' && NroHexa[i] <= 'F' ) ||
( NroHexa[i] >= 'a' && NroHexa[i] <= 'f' ) ||
( NroHexa[i] >= '0' && NroHexa[i] <= '9' ) ) )
{
Error = 1;
break;
}
}

if( !Error )
{
for( NroDec = 0, i = strlen(NroHexa) - 1; i>=0; i--)
{
PosMult = (long)pow( 16, (strlen(NroHexa) - 1 - i) );
if( PosMult == 0 )
PosMult = 1;
switch( NroHexa[i] )
{
case 'A':
case 'a':
NroDec += 10 * PosMult;
break;
case 'B':
case 'b':
NroDec += 11 * PosMult;
break;
case 'C':
case 'c':
NroDec += 12 * PosMult;
break;
case 'D':
case 'd':
NroDec += 13 * PosMult;
break;
case 'E':
case 'e':
NroDec += 14 * PosMult;
break;
case 'F':
case 'f':
NroDec += 15 * PosMult;
break;
default:
Aux[0] = NroHexa[i];
Aux[1] = '\0';
NroDec += atoi( Aux ) * PosMult;
break;
}
}
printf( "El numero %s en decimal es %ld\n", NroHexa, NroDec );
}
else
printf( "El numero ingresado no es hexadecimal\n" );
getch();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Conversion Hexadecimal a Decimal en C

Publicado por Jah (1 intervención) el 04/01/2012 17:11:27
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

char menu()
{
char c;

printf("1 - Decimal -> Binario\n");
printf("2 - Decimal -> Octal\n");
printf("3 - Decimal -> Hexadecimal\n");
printf("4 - Binario -> Decimal\n");
printf("5 - Binario -> Octal\n");
printf("6 - Binario -> Hexadecimal\n");
printf("7 - Octal -> Decimal\n");
printf("8 - Octal -> Binario\n");
printf("9 - Octal -> Hexadecimal\n");
printf("A - Hexadecimal -> Decimal\n");
printf("B - Hexadecimal -> Binario\n");
printf("C - Hexadecimal -> Octal\n");
printf("S - Salir\n");

printf("\nSeleccione opcion: ");
c = getche();
return c;
}


unsigned long conversor(unsigned long n1,int base1,int base2)
{
unsigned long alg,mult=1,n2=0;
while (n1 > 0)
{
alg = n1 % base1;
n1 /= base1;
n2 += (alg*mult);
mult *= base2;
}
return n2;
}

void main()
{
unsigned long n;
char op;


for(;;)
{
clrscr();
op = menu();
clrscr();

switch(op)
{
case '1':
printf("Conversor Decimal -> Binario\n");
printf("Introduza un numero Decimal: ");
scanf("%lu",&n);
printf("Numero Binario correspondente: ");
printf("%lu",conversor(n,2,10));
break;

case '2':
printf("Conversor Decimal -> Octal\n");
printf("Introduza um numero Decimal: ");
scanf("%lu",&n);
printf("Numero Octal correspondente: ");
printf("%lo",n);
break;

case '3':
printf("Conversor Decimal -> Hexadecimal\n");
printf("Introduza um numero Decimal: ");
scanf("%lu",&n);
printf("Numero Hexadecimal correspondente: ");
printf("%lx",n);
break;

case '4':
printf("Conversor Binario -> Decimal\n");
printf("Introduza un numero Binario: ");
scanf("%lu",&n);
printf("Numero Decimal correspondente: ");
printf("%lu",conversor(n,10,2));
break;

case '5':
printf("Conversor Binario -> Octal\n");
printf("Introduza un numero Binario: ");
scanf("%lu",&n);
printf("Numero Octal correspondente: ");
printf("%lo",conversor(n,10,2));
break;

case '6':
printf("Conversor Binario -> Hexadecimal\n");
printf("Introduza un numero Binario: ");
scanf("%ld",&n);
printf("Numero Hexadecimal correspondente: ");
printf("%lx",conversor(n,10,2));
break;

case '7':
printf("Conversor Octal -> Decimal\n");
printf("Introduza un numero Octal: ");
scanf("%lo",&n);
printf("Numero Decimal correspondente: ");
printf("%lu",n);
break;

case '8':
printf("Conversor Octal -> Binario\n");
printf("Introduza un numero Octal: ");
scanf("%lo",&n);
printf("Numero Binario correspondente: ");
printf("%lu",conversor(n,2,10));
break;

case '9':
printf("Conversor Octal -> Hexadecimal\n");
printf("Introduza un numero Octal: ");
scanf("%lo",&n);
printf("Numero Hexadecimal correspondente: ");
printf("%lx",n);
break;

case 'A':
case 'a':
printf("Conversor Hexadecimal -> Decimal\n");
printf("Introduza un numero Hexadecimal: ");
scanf("%lx",&n);
printf("Numero Decimal correspondente: ");
printf("%lu",n);
break;

case 'B':
case 'b':
printf("Conversor Hexadecimal -> Binario\n");
printf("Introduza un numero Hexadecimal: ");
scanf("%lx",&n);
printf("Numero Binario correspondente: ");
printf("%lu",conversor(n,2,10));
break;

case 'C':
case 'c':
printf("Conversor Hexadecimal -> Octal\n");
printf("Introduza un numero Hexadecimal: ");
scanf("%lx",&n);
printf("Numero Octal correspondente: ");
printf("%lo",n);
break;

case 'S':
case 's':
exit(0);
break;

default:
printf("Opcion invalida!");
}
getch();
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar