En Tue, 20 Oct 2009 18:51:21 -0300, Tommy Grav <tg...@pha.jhu.edu> escribió:

I have created a binary file that saves this struct from some C code:

   struct recOneData {
          char label[3][84];
          char constName[400][6];
        double timeData[3];
      long int numConst;
        double AU;
        double EMRAT;
      long int coeffPtr[12][3];
      long int DENUM;
      long int libratPtr[3];
      };

I try to read this file with python (ActiveState 2.6.3 on x86_64 Mac OS X 10.6.1) using the code below the hdrData and constNData are fine, while from the timeData onwards there are obvious problems. The code below works fine for a 32bit binary read with i386 python 2.5.2. Does anyone know what the proper format of a C double and long int is for a x86_64
binary?

I'd start comparing at least both struct sizes to see if they match. Then, at the C side determine offset and size of each member using macros like these:

#define COUNT_OF(_array) (sizeof(_array)/sizeof(*(_array)))
#define OFFSET_OF(_structure, _member) ((size_t)&(((_structure *)0)->_member))
#define SIZE_OF(_structure, _member) (sizeof((((_structure *)0)->_member)))

and then add padding bytes ('x') to the struct definition in Python to match those offsets (and probably use '=' for standard sizes).

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to