Buenas tengo una variable CHAR char *data con unos valores hexadecimales guardados en ella y quiero pasarle esos datos a una variable del tipo BYTE BYTE *data como si fuese valores en Hex "\x" pero no se como:
El problema es que los valoresHex varian durante la ejecucion del programa, sino podría declarar la variable con \x por delante de cada byte asi
char *valoresHex = "\xAA\xBB\xCC";
------
El problema es que los valores me llegan a valoresHex asi y quiero pasarselos como antes.
char *valoresHex = "AABBCC";
BYTE *valoresByte;
Un saludo y gracias. :)
El tamaño de char suele ser un byte, asi que no hace falta conversion. Si lo que quieres hacer es otra cosa, aclaralo mejor porque no me he enterado de nada.
Igual no me estoy explicando bien.......Tengo una función a la que hay que pasarle una variable de tipo BYTE en la que se le pasan valores en Hexadecimal.
funcion(BYTE *data)
Yo hago una serie de operaciones antes de utilizarla y como resultante de estas operaciones consigo una cadena con los valores que quiero pasarle pero guardados en un char así "AABBCC...."
Mi problema es que para que la función me admita esos valores necesito ponerles el "\x" delante a cada byte pero no se como.
es decir:
funcion("AABBCC") --> NO FUNCIONA
funcion("\xAA\xBB\xCC") --> SI FUNCIONA
Espero haberme explicado mejor...... Saludos y gracias denuevo.
Las variables Byte no existen en C++, a ver si te estas confundiendo de lenguaje...
Por otro lado, lo que puedes hacer es transformar el valor hexadecimal en decimal y pasar dicho valor decimal a la función.
hola, el hecho es que una cadena de bytes se pasa de esa forma, es decir así:
BYTE* asd = (BYTE*)"\x68\xFF\xFF\xFF\xFF\x68\xFF\xFF\xFF\xFF\x68";
si vos la pasás así:
"68FFFFFFFF68FFFFFFFF68"
entonces tu función de alguna forma tendría que saber que "68" (string) es el byte 68,
a lo que me refiero es que la función debería poder interpretar que se trata de bytes. porque de otra forma no serían bytes sino chares comunes..
obviamente dejando en claro que un byte = char, pero para representar un byte se requieren 2 chares osea "68", vemos que son dos chares + el cero son 3 chares, por lo cual no existe una forma directa de relacionar ambos datos. por eso de dije que tu función debería interpretar ya sea mediante una tabla o como fuere, los bytes de entrada.
atte
Eso es lo que me pasa, que no se como pasar esos char como si fuese una cadena de bytes.
La cadena que quiero pasar no es siempre la misma , ya que es resultante de una serie de operaciones, por lo que no puedo asignar los valores a mano usando los "\x" .
Si alguien me puede hechar un cable con la conversion se lo agradecería mucho.
Un saludo y gracias denuevo.
:)
¿Y por que no usas una variable int con el 0X delante como argumento para esa funcion en lugar de pasarlo como cadena?
funcion(int hex);
int hex = 0Xff;
Ya lo he solucionado usando sscanf ;)
sscanf (cadena,"%x",strHex);
Gracias a todos.
Cita de: Bullweiser en 21 Febrero 2013, 15:57 PM
Ya lo he solucionado usando sscanf ;)
sscanf (cadena,"%x",strHex);
Esa llamada a funcion no hara lo esperado, el problema es el siguiente: sscanf consumira
todos los caracteres de la cadena y en base a ellos almacenara
un solo numero en la dirección indicada por "strHex".
Para realizar la operación que mencionas se debe utilizar un bucle y en la llamada a función especificar la anchura de campo, esto es, el máximo de caracteres a procesar con (en tu caso) "%
Nx". El ultimo paso en el cuerpo del bucle (y ello depende de tu programa) es almacenar el numero obtenido en el array de bytes.
Un programa de ejemplo:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *p = "0011223344556677AABBCCDD";
unsigned num;
int nc;
while (sscanf(p, "%2x%n", &num, &nc) == 1){
printf("%.*s ==> %3u == %2X\n", nc, p, num, num);
p += nc;
}
return EXIT_SUCCESS;
}
Y su salida es:
00 ==> 0 == 0
11 ==> 17 == 11
22 ==> 34 == 22
33 ==> 51 == 33
44 ==> 68 == 44
55 ==> 85 == 55
66 ==> 102 == 66
77 ==> 119 == 77
AA ==> 170 == AA
BB ==> 187 == BB
CC ==> 204 == CC
DD ==> 221 == DD
Un saludo
Si , ya me he dado cuenta y ya estaba usando un while como indicas.
Muchas gracias. ;)
Amigo lo que hice fue crear una especie de solución ;D
http://foro.elhacker.net/programacion_cc/cadena_de_bytes_a_string-t383814.0.html
espero que te guste
Gracias !!! ;)