Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: javier en 17 de Diciembre de 2008, 01:00:10
Título: Como convertir dos ascci (representando un numero en hexa) a decimal ?
Publicado por: javier en 17 de Diciembre de 2008, 01:00:10
Hola, Se me presenta esta dificultad y no se si el ccs trae alguna funcion para resolver esto... me llegan al pic grupos de dos bytes de la siguiente manera (dos ejemplos) 66 49 ---que representan dos caracters (dos asccis) B 1 ---en hexa B1 -- a decimal es 177 51 67--- que representan dos caracters (dos asccis) 3 C----en hexa 3C---a decimal es 60 saben del alguna funcion o alguna manera simple de pasar por ejemplo de estos dos bytes 66 - 49 al decimal 177 ? Saludos y gracias por antemano Javier
Título: Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
Publicado por: joscar66 en 17 de Diciembre de 2008, 02:19:58
Hola Javier,
Bueno presento la forma en que yo lo haria:
Primero declaramos una funcion que nos convierta de char a decimal:
Título: Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
Publicado por: javier en 17 de Diciembre de 2008, 20:40:15
muchas gracias por la colaboraciones!!! termine usando ideas de uds para escribir una rutina que tome los dos numeros ascci (representando un numeor en hexa) y me devuelva el decimal que nesecito.esta testeado y anda de 10!! espero que a alguien le sirva! error_conversion es una variable global para detectar el si hubo un error en la conversion (porque la funcion puede retornar valores de 0 -255)
Código: C#
int dosasctodec(int char1,int char2)
{
int tabla1[]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70};//tabla de codigos ascii --0123456789ABCDEF
int index[2];//guardo el indice del primer caracter index[0] ,index[1]
int caract[2];
int i,j;
caract[0]=char1;
caract[1]=char2;
index[0]=25;//los cargo con 25--un valor que no prodria ser para detectar error
index[1]=25;
for(j=0;j<=1;j++)
{
error_conversion=false;
for(i=0;i<16;i++)//Escaneamos la tabla para los dos caract[]
{
if( caract[j]==tabla1[i])
{
index[j]=i;
}
}
if(index[j]==25){
error_conversion=true;
return(0);}
}
return(index[0]*16+index[1]);//lo paso de hexa a decimal
}
Título: Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
Publicado por: javier en 17 de Diciembre de 2008, 20:43:54
no se copio bien ,faltaba un corchete en tabla1...aca esta
Código: C#
int dosasctodec(int char1,int char2)
{
int tabla1[]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70};//tabla de codigos ascii --0123456789ABCDEF
int index[2];//guardo el indice del primer caracter index[0] ,index[1]
int caract[2];
int i,j;
caract[0]=char1;
caract[1]=char2;
index[0]=25;//los cargo con 25--un valor que no prodria ser para detectar error
index[1]=25;
for(j=0;j<=1;j++)
{
error_conversion=false;
for(i=0;i<16;i++)//Escaneamos la tabla para los dos caract[]
{
if( caract[j]==tabla1[j])
{
index[j]=i;
}
}
if(index[j]==25){
error_conversion=true;
return(0);}
}
return(index[0]*16+index[1]);//lo paso de hexa a decimal
}
Título: Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
Publicado por: RedPic en 17 de Diciembre de 2008, 20:52:59
Me alegra que te haya funcionado :mrgreen:
P.D.: He modificado todos los post que presentaban fuente en C para aplicarles el código GeSHi, así se ven mucho mas adecuadamente. Con [ code = csharp ] Código C [ / code ] (quitando los espacios) se presenta el Código C formateado.
Título: Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
Publicado por: joscar66 en 18 de Diciembre de 2008, 01:26:47
Hola Javier, ¡Bien! que te hayas esforzado en realizar la funcion para tus propios requerimientos
Tienes toda la razon Redpic, el codigo se ve mucho mejor, lo tendre en cuentas en futuros post