Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: bwsr en 20 Febrero 2013, 20:46 pm



Título: Variable Char a BYTE
Publicado por: bwsr en 20 Febrero 2013, 20:46 pm
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.  :)



Título: Re: Variable Char a BYTE
Publicado por: 0xDani en 20 Febrero 2013, 21:38 pm
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.


Título: Re: Variable Char a BYTE
Publicado por: bwsr en 20 Febrero 2013, 22:28 pm
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.


Título: Re: Variable Char a BYTE
Publicado por: amchacon en 20 Febrero 2013, 22:35 pm
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.


Título: Re: Variable Char a BYTE
Publicado por: 85 en 21 Febrero 2013, 00:15 am
hola, el hecho es que una cadena de bytes se pasa de esa forma, es decir así:

Código:
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..








Título: Re: Variable Char a BYTE
Publicado por: 85 en 21 Febrero 2013, 00:22 am
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



Título: Re: Variable Char a BYTE
Publicado por: bwsr en 21 Febrero 2013, 10:03 am
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.
 :)


Título: Re: Variable Char a BYTE
Publicado por: pacoperico en 21 Febrero 2013, 11:57 am
¿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;



Título: Re: Variable Char a BYTE
Publicado por: bwsr en 21 Febrero 2013, 15:57 pm
Ya lo he solucionado usando sscanf   ;)


Código:
sscanf (cadena,"%x",strHex);

Gracias a todos.


Título: Re: Variable Char a BYTE
Publicado por: rir3760 en 21 Febrero 2013, 17:26 pm
Ya lo he solucionado usando sscanf   ;)

Código:
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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   char *p = "0011223344556677AABBCCDD";
  7.   unsigned num;
  8.   int nc;
  9.  
  10.   while (sscanf(p, "%2x%n", &num, &nc) == 1){
  11.      printf("%.*s ==> %3u == %2X\n", nc, p, num, num);
  12.      p += nc;
  13.   }
  14.  
  15.   return EXIT_SUCCESS;
  16. }

Y su salida es:
Código:
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


Título: Re: Variable Char a BYTE
Publicado por: bwsr en 21 Febrero 2013, 19:18 pm
Si , ya  me he dado cuenta y ya estaba usando un while como indicas.
Muchas gracias. ;)


Título: Re: Variable Char a BYTE
Publicado por: 85 en 22 Febrero 2013, 03:54 am
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


Título: Re: Variable Char a BYTE
Publicado por: bwsr en 23 Febrero 2013, 20:04 pm
Gracias !!!  ;)