TODOPIC
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
. ¿Perdiste tu
email de activación
?
1 Hora
1 Día
1 Semana
1 Mes
Siempre
Ingresar con nombre de usuario, contraseña y duración de la sesión
Este tema
Este sub-foro
Todo el foro
Google
Inicio
Ayuda
Buscar
Ingresar
Registrarse
TODOPIC
»
Microcontroladores PIC
»
Lenguaje C para microcontroladores PIC
(Moderadores:
pikman
,
pocher
,
vszener
,
Suky
) »
Como convertir dos ascci (representando un numero en hexa) a decimal ?
« anterior
próximo »
Imprimir
Páginas: [
1
]
Ir Abajo
Autor
Tema: Como convertir dos ascci (representando un numero en hexa) a decimal ? (Leído 2407 veces)
0 Usuarios y 1 Visitante están viendo este tema.
javier
PIC10
Mensajes: 35
Como convertir dos ascci (representando un numero en hexa) a decimal ?
«
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
En línea
joscar66
Colaborador
PIC16
Mensajes: 116
Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
«
Respuesta #1 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:
Código: C#
unsigned char2dec
(
char
dato
)
{
byte
tabla
[
]
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
}
;
byte
i
;
for
(
i
=
0
;
i
<
16
;
i
++
)
//Escaneamos la tabla para saber el equivalente
{
if
(
dato
==
tabla
[
i
]
)
return
i
;
//Cuando lo encuentra retorna
}
return
-
1
;
}
Luego, en el programa principal se llama a la funcion de esta forma:
Código: C#
void
main
(
)
{
byte
dig, dig1
=
66
, dig2
=
49
;
BYTE
num1,num2
;
num1
=
char2dec
(
dig1
)
;
num2
=
char2dec
(
dig2
)
;
if
(
(
num1
!=
-
1
)
&&
(
num2
!=
-
1
)
)
//Si no hubo error en la conversion de los datos, imprimimos los valore
printf
(
"%c %c __ %d %d __ %u"
,dig1,dig2,num1,num2,
(
num1
*
16
)
+
num2
)
;
//El valor final resulta de multiplicar el numero 1 por 16
// y sumarle el segundo
while
(
1
)
;
}
Espero te sirva
«
Última modificación: 17 de Diciembre de 2008, 20:47:44 por un Moderador
»
En línea
Esfuércense por ser mejor cada día...
¡Saludos desde COLOMBIA!
jgpeiro06
Colaborador
PIC18
Mensajes: 276
Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
«
Respuesta #2 en:
17 de Diciembre de 2008, 09:59:22 »
creo que se puede hacer con la funcion estandar sprintf.
Código: C#
#include <stdio.h>
main
(
)
{
char
string
[
10
]
;
int
numero
=
177
;
sprintf
(
string
,
"%X"
, numero
)
;
//string = "B1"
numero
=
0
;
sscanf
(
string
,
"%X"
,
&
numero
)
;
//numero = 177; //Convierte la cadena "B1" al numero 177.
}
«
Última modificación: 17 de Diciembre de 2008, 20:48:12 por un Moderador
»
En línea
jgpeiro06
Colaborador
PIC18
Mensajes: 276
Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
«
Respuesta #3 en:
17 de Diciembre de 2008, 10:04:09 »
quiero decir...
creo que se puede hacer con la funcion estandar SSCANF.
En línea
RedPic
Administrador
DsPIC33
Mensajes: 5544
Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
«
Respuesta #4 en:
17 de Diciembre de 2008, 11:31:00 »
Yo me he escrito un par de funciones que me van de lujo.
Código: C#
/** \brief Función que convierte un carácter Hexadecimal ASCII NULL-END a su valor entero de 8 bits.
* \param d Caracter Hexadecimal a convertir.
* \return int8 Valor numérico.
*/
int8 ascii_to_hex
(
char
d
)
{
int
r
=
0x00
;
if
(
isxdigit
(
d
)
)
{
if
(
isdigit
(
d
)
)
{
r
=
d
-
'0'
;
}
if
(
isalpha
(
d
)
)
{
d
=
toupper
(
d
)
;
r
=
10
+
(
d
-
'A'
)
;
}
}
return
(
r
)
;
}
/** \brief Función que convierte un string numérico Hexadecimal ASCII NULL-END a su valor entero de 8 bits.
* \param pF Puntero al buffer que contiene el string numérico ASCII Hexadecimal de 2 digitos (00h a FFh).
* \return int8 Valor numérico.
*/
int8 hex_to_int8
(
char
*
pF
)
{
int8 i,ret
;
ret
=
0
;
for
(
i
=
1
;
i
!=
255
;
i
--
)
{
ret
+=
ascii_to_hex
(
pF
[
i
]
)
*
(
(
15
*
(
1
-
i
)
)
+
1
)
;
}
return
ret
;
}
// Su uso sería ...
char
HexValue
[
]
=
"1F"
;
int8 BinValue
=
0
;
BinValue
=
hex_to_int8
(
(
Char
*
)
HexValue
)
;
// BinValue valdría 31
En línea
Contra la estupidez los propios dioses luchan en vano.
Schiller
Mi Güeb :
Picmania
RedPic
Administrador
DsPIC33
Mensajes: 5544
Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
«
Respuesta #5 en:
17 de Diciembre de 2008, 11:39:39 »
Más fácil aún. Con tan solo la primera de esas funciones es suficiente si deseas solo dos dígitos hex.
Código: C#
int
ascii2hex
(
char
d
)
{
// Convierte un caracter ascii a hex ---
int
r
=
0x00
;
if
(
isxdigit
(
d
)
)
{
if
(
isdigit
(
d
)
)
r
=
d
-
'0'
;
if
(
isalpha
(
d
)
)
{
d
=
toupper
(
d
)
;
r
=
10
+
(
d
-
'A'
)
;
}
}
return
(
r
)
;
}
// Su uso sería entonces
char
HexValue
[
]
=
"1F"
;
int8 BinValue
=
0
;
BnValue
=
(
16
*
ascii2hex
(
HexValue
[
0
]
)
)
+
(
ascii2hex
(
HexValue
[
1
]
)
)
;
En línea
Contra la estupidez los propios dioses luchan en vano.
Schiller
Mi Güeb :
Picmania
javier
PIC10
Mensajes: 35
Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
«
Respuesta #6 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
}
«
Última modificación: 17 de Diciembre de 2008, 20:50:08 por un Moderador
»
En línea
javier
PIC10
Mensajes: 35
Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
«
Respuesta #7 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
}
«
Última modificación: 17 de Diciembre de 2008, 20:54:44 por un Moderador
»
En línea
RedPic
Administrador
DsPIC33
Mensajes: 5544
Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
«
Respuesta #8 en:
17 de Diciembre de 2008, 20:52:59 »
Me alegra que te haya funcionado
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.
En línea
Contra la estupidez los propios dioses luchan en vano.
Schiller
Mi Güeb :
Picmania
joscar66
Colaborador
PIC16
Mensajes: 116
Re: Como convertir dos ascci (representando un numero en hexa) a decimal ?
«
Respuesta #9 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
Bye
En línea
Esfuércense por ser mejor cada día...
¡Saludos desde COLOMBIA!
Imprimir
Páginas: [
1
]
Ir Arriba
« anterior
próximo »
TODOPIC
»
Microcontroladores PIC
»
Lenguaje C para microcontroladores PIC
(Moderadores:
pikman
,
pocher
,
vszener
,
Suky
) »
Como convertir dos ascci (representando un numero en hexa) a decimal ?