Variable Char a BYTE

Iniciado por bwsr, 20 Febrero 2013, 20:46 PM

0 Miembros y 1 Visitante están viendo este tema.

bwsr

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.  :)


0xDani

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.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

bwsr

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.

amchacon

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.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

85

#4
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..






Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

85

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

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/

bwsr

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.
:)

pacoperico

¿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;


bwsr

Ya lo he solucionado usando sscanf   ;)



sscanf (cadena,"%x",strHex);


Gracias a todos.

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language