[SemiOT]Pack y unpack

Fernando Blat ferblape en inf.upv.es
Jue Sep 30 23:36:32 CEST 2004


El jue, 30 de sep de 2004, a las 09:47:55 +0200, Francesc Alted dijo:
> Hola,
> 
> Lo que preguntas es muy genérico, pero intentaré darte alguna pista (aunque
> a lo mejor no es lo que quieres).
> 
> Una vez tengas los datos en el buffer binario recibido en el socket del
> programa C, simplemente has de definir una estructura parecida a esta:
> 
> typedef struct {int *i; char *s; float *f;} pstruct;
> 
> con los campos iguales a tu definición del struct en python. Después defines
> un puntero a esta estructura:
> 
> pstruct *ps;
> 
> y le asignas la dirección de tu buffer:
> 
> ps = (pstruct *)buffer;
> 
> A partir de ahi, ya puedes acceder a la info:
> 
> int = ps->i; str = ps->s; float = ps->f;

Muchas gracias, es justo lo que quería. Lo he probado y funciona perfecto.

Sin embargo me he dado cuenta de que esta forma de compartir estructuras de datos entre C y Python está un poco cogida por pinzas, pues binarizar unos datos depende demasiado del compilador y de la plataforma. Si se quiere ser purista del todo sólo queda como solución enviar strings que luego se irán convirtiendo, según un orden dado, en los campos de la estructura de datos. De todas formas me gustaría conocer vuestras alternativas, ya como curiosidad, pues el problema está solucionado :)

-- 
Fernando Blat Peris 
> ferblape en inf.upv.es




Más información sobre la lista de distribución Python-es