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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#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 (816 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#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

RE:Conversion Hexadecimal a Decimal en C

Publicado por Jordan (1 intervención) el 06/04/2018 01:43:52
me da un error cuando intento compilar
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