T
Tommy Grav
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?
def read_header(cls):
hdrData = "84s"*3
constNData = "6s"*400
timeData = "d"*3
numData = "ldd"
coeffData = "3l"*12
denumData = "l"
libPtrData = "lll"
constData = "400d"
hformat = hdrData + constNData + timeData + numData +
coeffData + denumData + libPtrData
header = struct.unpack(hdrData,cls.JPLeph.read(struct.calcsize
(hdrData)))
constN = struct.unpack(constNData,cls.JPLeph.read
(struct.calcsize(constNData)))
# Reading in the time data
cls.tstart,cls.tend,cls.tstep = struct.unpack
(timeData,cls.JPLeph.read(struct.calcsize(timeData)))
# Read in the number of constants and the values for AU and
emrat
nconst, cls.au, cls.emrat = struct.unpack
(numData,cls.JPLeph.read(struct.calcsize(numData)))
# Reading in the coefficient pointers
cls.coeff = struct.unpack(coeffData,cls.JPLeph.read
(struct.calcsize(coeffData)))
# Read in the DENUM variable and the libratPtr(3)
(cls.denum, ) = struct.unpack(denumData,cls.JPLeph.read
(struct.calcsize(denumData)))
cls.libPtr = struct.unpack(libPtrData,cls.JPLeph.read
(struct.calcsize(libPtrData)))
if cls.denum == 405:
cls.asize = 1018
elif cls.denum == 200:
cls.asize = 826
else:
raise ValueError("JPL ephem file is in unknown format %d"
% (cls.denum))
Cheers
Tommy
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?
def read_header(cls):
hdrData = "84s"*3
constNData = "6s"*400
timeData = "d"*3
numData = "ldd"
coeffData = "3l"*12
denumData = "l"
libPtrData = "lll"
constData = "400d"
hformat = hdrData + constNData + timeData + numData +
coeffData + denumData + libPtrData
header = struct.unpack(hdrData,cls.JPLeph.read(struct.calcsize
(hdrData)))
constN = struct.unpack(constNData,cls.JPLeph.read
(struct.calcsize(constNData)))
# Reading in the time data
cls.tstart,cls.tend,cls.tstep = struct.unpack
(timeData,cls.JPLeph.read(struct.calcsize(timeData)))
# Read in the number of constants and the values for AU and
emrat
nconst, cls.au, cls.emrat = struct.unpack
(numData,cls.JPLeph.read(struct.calcsize(numData)))
# Reading in the coefficient pointers
cls.coeff = struct.unpack(coeffData,cls.JPLeph.read
(struct.calcsize(coeffData)))
# Read in the DENUM variable and the libratPtr(3)
(cls.denum, ) = struct.unpack(denumData,cls.JPLeph.read
(struct.calcsize(denumData)))
cls.libPtr = struct.unpack(libPtrData,cls.JPLeph.read
(struct.calcsize(libPtrData)))
if cls.denum == 405:
cls.asize = 1018
elif cls.denum == 200:
cls.asize = 826
else:
raise ValueError("JPL ephem file is in unknown format %d"
% (cls.denum))
Cheers
Tommy