Discussion:
Convertir una estructura en un array de bytes
(demasiado antiguo para responder)
Derek
2005-05-09 11:15:33 UTC
Permalink
Hola:

Necesito convertir una estructura (struct) a un array de bytes, es decir,
convertirla en un puntero a char (char *).

¿Alguien sabe como hacerlo?. Gracias.
Zephryn Xirdal
2005-05-09 11:37:05 UTC
Permalink
Necesito convertir una estructura (struct) a un array de bytes, es dec=
ir,
convertirla en un puntero a char (char *).
=BFAlguien sabe como hacerlo?. Gracias.
pues....

struct st
{
...
};

struct st mi_st;

char *p=3D(char *)&mi_st;

yat=E1.
Derek
2005-05-09 11:55:33 UTC
Permalink
Gracias,

y para hacer la conversion inversa: de char * al struct original?
Post by Derek
Necesito convertir una estructura (struct) a un array de bytes, es decir,
convertirla en un puntero a char (char *).
¿Alguien sabe como hacerlo?. Gracias.
pues....

struct st
{
...
};

struct st mi_st;

char *p=(char *)&mi_st;

yatá.
Zephryn Xirdal
2005-05-09 13:52:49 UTC
Permalink
Post by Derek
Gracias,
y para hacer la conversion inversa: de char * al struct original?
el
Post by Derek
Necesito convertir una estructura (struct) a un array de bytes, es =
decir,
convertirla en un puntero a char (char *).
=BFAlguien sabe como hacerlo?. Gracias.
pues....
struct st
{
...
};
struct st mi_st;
char *p=3D(char *)&mi_st;
yat=E1.
struct st *nueva=3D(struct st *)p;
J.A. Gutierrez
2005-05-11 07:54:03 UTC
Permalink
Derek <***@yo.com> wrote:
: Hola:

: Necesito convertir una estructura (struct) a un array de bytes, es decir,
: convertirla en un puntero a char (char *).

Usar "union" probablemente sera lo mas limpio, claro y
adecuado.
--
PGP and other useless info at \
http://webdiis.unizar.es/~spd/ \
finger://daphne.cps.unizar.es/spd \ Timeo Danaos et dona ferentes
ftp://ivo.cps.unizar.es/pub/ \ (Virgilio)
jordi+
2005-05-11 15:12:01 UTC
Permalink
Post by J.A. Gutierrez
: Necesito convertir una estructura (struct) a un array de bytes, es decir,
: convertirla en un puntero a char (char *).
Usar "union" probablemente sera lo mas limpio, claro y
adecuado.
Una alternativa a union, que segun los casos puede ser mas directa y limpia:

#include <stdio.h>

struct st
{
int i;
char c;
double d;
};

int main()
{
struct st estructura;
char *pc;
int i;

/* una estructura de prueba */
estructura.i = 2;
estructura.c = 'a';
estructura.d = 3.141593;

/* simplemente asignas la dirección de la estructura a un char* */
pc = (char *) &estructura;

/* pc ya es un array de bytes, y puedes recorrerlo con */
for (i=0; i<sizeof(struct st); ++i)
printf("[%2d] = %4d\n", i, pc[i]);

/* ten en cuenta que, segun sistema/compilador, pueden existir bytes
de padding entre los campos de la estrucutra, por ejemplo, con gcc
y en maquinas x86 se dejan 3 bytes de padding después del char */

return 0;
}

Loading...