Sábado 9 de Noviembre de 2024, 03:28
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
hexadecimal en con 0x
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: hexadecimal en con 0x (Leído 2716 veces)
blasata
Miembro activo
Mensajes: 32
hexadecimal en con 0x
«
en:
Martes 9 de Noviembre de 2010, 20:52 »
0
Hola, mirar no sé si se podrá hacer pero bueno, a ver si alguien me puede ayudar:
la cosa es que estoy recibiendo por serie datos como estos, por ejemplo ..DA 11 21 C3..en hexadecimal, y parte de ellos los uso para enviar yo una respuesta. El problema es que no sé crear un array de char con el 0x delante. Me explico, manualmente me puedo crear esto:
Código: C++
unsigned
char
inventario
[
8
]
=
{
0xD6
,
0x00
,
0x05
,
0xFE
,
0x00
,
0x05
,
0xFA
,
0x40
}
;
WriteFile
(
hLCD, inventario,
8
,
&
m,
NULL
)
;
(no sé si se puede hacer de alguna forma mejor...)
Lo envio y todo bien. Luego a la respuesta que me llega le extraigo la parte de la trama que me interesa y la guardo en:
Código: C
unsigned
char
sn
[
8
]
;
Ahora con lo que hay dentro de sn debo formar una nueva trama que debo enviar. ¿Pero como? He probado haciendo:
Código: C++
unsigned
char
b
;
sprintf
(
b,
"%c"
,
0x40
)
;
pero no va bien, como se puede poner el 0x delante a un hexadeciamal que yo quiera y guardarlo en un array?
Lo que no sé es cómo se puede crear la matriz de ejemplo de arriba pero con datos que el programa va recibiendo?
No tendré que crear un montón de
Código: C
#define A4 0xA4
para luego usarlos...
Tweet
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: hexadecimal en con 0x
«
Respuesta #1 en:
Miércoles 10 de Noviembre de 2010, 00:08 »
0
Creo que confundes conceptos. Ya tienes los números como quieres en tu array de
unsigned char
. Otra cosa es que cuando los imprimes por pantalla, salgan caracteres, pero el valor real sigue siendo el hexadecimal. Si quieres comprobar esto, prueba haciendo
Código: C
for
(
i
=
0
;
i
<
8
;
i
++
)
printf
(
"0x%X "
,
sn
[
i
]
)
;
y verás cómo te imprime los valores hexadecimales.
O no te estoy entendiendo...
Fr33k K0mpu73r
blasata
Miembro activo
Mensajes: 32
Re: hexadecimal en con 0x
«
Respuesta #2 en:
Miércoles 10 de Noviembre de 2010, 19:09 »
0
Bueno la cosa es todavia me hago un lio con los arrays..
A ver si hay una forma rápida de hacer esto: si un declaro un array de caracteres como este
Código: C
char
buffer
[
40
]
;
como puedo pasarlo a un array como este(con la idea de poder guardar numeros de 0..255..)
Código: C
unsigned
char
Leer
[
40
]
;
en el que cada elemento se forme tomando de dos en dos de la cadena original.
O sea que si tengo por ejemplo:
Código: C
Buffer
[
0
]
=
65
;
// la A
Buffer
[
1
]
=
57
;
// el 9
Buffer
[
2
]
=
48
;
// el 0
Buffer
[
3
]
=
70
;
// la F
pueda llegar a tener en 'Leer' el primer elemento A9, 0F...
O si se puede, directamente en decimal, que seria 169, 15...
muchas gracias!
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: hexadecimal en con 0x
«
Respuesta #3 en:
Miércoles 10 de Noviembre de 2010, 21:04 »
0
EDITO: disculpa, borro mi respuesta, te he leído mal...
EDITO2: curioso problema. Me ha llevado un momento pensarlo, y te doy las gracias por el ejercicio
No sé si habrá alguna solución más obvia, pero esto es lo más sencillo que se me ha ocurrido:
Código: C
#include <stdio.h>
// Devuelve el valor representado por el digito hexadecimal pasado como parámetro
// Para caracteres que no sean un dígito hexadecimal devuelve 0 (igual que para el dígito '0')
unsigned
char
hextouc
(
char
c
)
{
unsigned
char
r
=
0
;
if
(
c
>=
0x30
&&
c
<
0x3A
)
{
r
=
c
-
0x30
;
}
else
if
(
c
>=
0x41
&&
c
<
0x4B
)
{
r
=
c
-
0x37
;
}
return
r
;
}
int
main
(
)
{
char
a
[
2
]
=
{
'A'
,
'9'
}
;
unsigned
char
c
;
c
=
(
hextouc
(
a
[
0
]
)
<<
4
)
+
hextouc
(
a
[
1
]
)
;
printf
(
"%02Xn"
,
c
)
;
printf
(
"%dn"
,
c
)
;
return
0
;
}
Si no entiendes algo del código, me preguntas
Ten en cuenta también que según tu ejemplo,
Leer
sólo contendría la mitad de elementos que
buffer
, ya que se necesitan dos elementos de
buffer
para formar uno de
Leer
. Por tanto con
Leer[20]
y
buffer[40]
vas perfectamente
PD: cierto que
hextouc()
es fea, y me gustaría que alguien más propusiera una solución mejor, así aprendemos entre todos
Fr33k K0mpu73r
blasata
Miembro activo
Mensajes: 32
Re: hexadecimal en con 0x
«
Respuesta #4 en:
Viernes 12 de Noviembre de 2010, 17:41 »
0
guau, un momento solo?!!
muchas gracias es justo lo que andaba buscando, me estaba liando mucho ya...
Epa
Miembro MUY activo
Mensajes: 242
Nacionalidad:
Re: hexadecimal en con 0x
«
Respuesta #5 en:
Viernes 12 de Noviembre de 2010, 21:19 »
0
Buenas.
En otro dia me pegue una mirada al foro, pero sin tiempo de responder.
Y aunque moskito ya te dio una solucion, te dejo otra por si sirve.
Lo pongo directamente con un ejemplo para que se entienda.
Código: C++
#define LEN 6
int
i
;
char
hexw
[
13
]
=
"FF07A33700B9"
;
unsigned
int
h
;
unsigned
char
hexn
[
LEN
]
;
for
(
i
=
0
;
i
<
LEN
;
i
++
)
{
sscanf
(
(
hexw
+
2
*
i
)
,
"%2X"
,
&
h
)
;
hexn
[
i
]
=
h
;
}
Saludos
The sweet smell of a great sorrow lies over the land.
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: hexadecimal en con 0x
«
Respuesta #6 en:
Lunes 15 de Noviembre de 2010, 00:38 »
0
Con sscanf() no se me había ocurrido, aunque habría que ver el tiempo de ejecución de cada uno
Fr33k K0mpu73r
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
hexadecimal en con 0x