ctypes in python failed to honor c_int

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Tue Mar 18 01:47:08 EDT 2008


On 17 mar, 23:57, Jerry Fleming <jerry.flem... at saybot.com> wrote:

> I have a binary file written with c structures. Each record contains a
> null-terminated string followed by two 4-bytes integers. I wrote a small
> segment of python code to parse this file in this way:
> [coe]
> #!/usr/bin/python
>
> from ctypes import *
>
> class Entry(Structure):
>         _fields_ = ('w', c_char_p), ('s', c_uint, 32), ('l', c_uint, 32)
>
> idx = open('x.idx', 'rb')
> str = idx.read(1000)
> obj = Entry(str)
> print obj.w
> print obj.s
> print obj.l
> [/code]
> where the field w is the string, and s and l are the integers. Problem
> is that, I can only get the strings, not the integers. Well, I did got
> integers, but they are all zeros. What should I do to get the real numbers?

So the string has a variable length? For "Hello" you have
'h','e','l','l','o', a zero byte, followed by the two integers? This
is somewhat unusual for a C struct (in fact you can't declare it in
C). Perhaps the string is actually a char[n] array with a declared
maximum size?

Try printing repr(a_few_read_bytes) or a_few_read_bytes.encode("hex")
to see the actual file contents.

--
Gabriel Genellina



More information about the Python-list mailing list