Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > C / C++ > Conversion de Hexadecimal a Decimal
-Foros de debate

C / C++
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Conversion de Hexadecimal a Decimal
Enviado por elpollo12 el día 19 de mayo de 2008

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.

 
Re: Conversion de Hexadecimal a Decimal
Enviado por David Reza el día 19 de mayo de 2008

Recuerda que el arreglo es de caracteres. En tu sentencia if estás comparando un carácter con un entero, algo así:

'1' == 1;

lo cual es incorrecto. Tu comparación debería ser así:

if (cad[i] >= '0' && cad[i]<='9')
n=n+ (cad[i]-48) *pow(16,c);

A continuación te explico la parte de '(cad[i]-48)'.

Al tener un carácter numérico en tu arreglo de tipo caracter podemos utilizar su código ASCII. Los códigos ASCII del 0 al 9 van del 48 al 57, respectivamente. Es por eso que si tu ingresas el valor de '1', su código ASCII será el 49, pero si le restamos 48, nos quedará 1, que es el número que queremos, no '1'. Teniendo el 1, ahora si podemos hacer la multiplicación y luego realizar la suma.

Otro error que tiene tu programa es que la sentencia 'n=n+num[i]*pow(16,c);' ser realizará SIEMPRE, así se cumpla o no se cumplan los condicionales 'if' y 'else if' ya que dicha sentencia no tienen ninguna condición.

Aquí te dejo tu programa ya corregido, espero que te sirva.

Pero antes un último consejo, trata siempre de utilizar 'int main()' en vez de 'main()' ya que de esa forma especificas que la función retornará con un valor, que es lo que pasa cuando se ejecuta la instrucción 'return 0'. El compilador no te mandará ningún error sobre esto, pero es mejor que tus programas sean estándares y se puedan compilar en cualquier compilador, no sólo en un compilador específico.

-------------------------------------------------------------------
cout<<"Ingrese el numero en hexadecimal: ";
cin>>cad;
tam=strlen(cad);
for(i=tam-1; i>=0; i--)
{
if(cad[i]<='9' && cad[i]>='0')
{
n=n+ (cad[i]-48) *pow(16,c);
}
else
{
if(cad[i]=='a') {num=10;}
if(cad[i]=='b') {num=11;}
if(cad[i]=='c') {num=12;}
if(cad[i]=='d') {num=13;}
if(cad[i]=='e') {num=14;}
if(cad[i]=='f') {num=15;}
n=n+num*pow(16,c);
}
c++;
--------------------------------------------------------------------

Saludos

 


Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network