Autor
|
Tema: Variable Char a BYTE (Leído 6,788 veces)
|
bwsr
Desconectado
Mensajes: 80
|
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.
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
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.
|
|
|
En línea
|
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
Desconectado
Mensajes: 80
|
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.
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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.
|
|
|
En línea
|
|
|
|
85
|
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..
|
|
« Última modificación: 21 Febrero 2013, 00:23 am por 85 »
|
En línea
|
|
|
|
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
|
|
|
En línea
|
|
|
|
bwsr
Desconectado
Mensajes: 80
|
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.
|
|
|
En línea
|
|
|
|
pacoperico
Desconectado
Mensajes: 100
|
¿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;
|
|
|
En línea
|
|
|
|
bwsr
Desconectado
Mensajes: 80
|
Ya lo he solucionado usando sscanf sscanf (cadena,"%x",strHex); Gracias a todos.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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
|
|
|
En línea
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Variable mayor a char?
Programación C/C++
|
Talard
|
6
|
3,802
|
19 Febrero 2012, 18:02 pm
por rir3760
|
|
|
[Ayuda] variable dentro de char (solucionado)
« 1 2 »
Programación C/C++
|
sabeeee
|
11
|
6,890
|
24 Diciembre 2014, 21:20 pm
por sabeeee
|
|
|
ayuda paso de byte* a char*
« 1 2 3 »
Programación C/C++
|
Kaxperday
|
21
|
8,353
|
27 Junio 2015, 03:22 am
por Kaxperday
|
|
|
Suma byte a byte con acarreo en variable de 2 bytes
Programación C/C++
|
AlbertoBSD
|
2
|
4,387
|
18 Mayo 2016, 18:21 pm
por AlbertoBSD
|
|
|
Error en este código: no se puede convertir de 'byte[]' a 'char[]'
.NET (C#, VB.NET, ASP)
|
Meta
|
5
|
6,022
|
29 Diciembre 2023, 18:20 pm
por Meta
|
|