[Numpy-discussion] frombuffer alignment for ctypes.Structure array

Roland Schulz roland at utk.edu
Fri Apr 10 03:12:41 EDT 2009


Hi,

I would like to create a ndarray view on an array of ctypes.Structure.
(reason: see below).

The problem is that the structure size is not falling on an alignment
boundary and thus the size is bigger than its parts.

A sample showing the problem:

import numpy as N
from ctypes import *
class C(Structure):
    _fields_=[("a",c_int),("b",c_short)]
c=(C*2)()
_ctypes_to_numpy = {c_short : N.int16,c_int : N.int32}
ty = [(x,_ctypes_to_numpy[y]) for x,y in C._fields_]
x=N.frombuffer(c,ty)

The is no align or aligned option to frombuffer. What is the best way to
tell numpy to align the data as the C-struct/ctypes.Stucture array is?


reason:
I have an array which get allocated in the external C library and thus I get
a pointer on structs from that C function.
The only way I know how to create a ndarray view for pointers on data, is to
first convert the ctypes pointer to a ctypes array.
I convert the POINTER(t_X) to an ctypes array of the structre using the
(t_X*N).from_address(addressof(X.contents))
trick, where t_X is the data type of the struct and X the pointer to the
array.

Thanks
Roland


-- 
ORNL/UT Center for Molecular Biophysics cmb.ornl.gov
865-241-1537, ORNL PO BOX 2008 MS6309
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20090410/9b9c32df/attachment.html>


More information about the NumPy-Discussion mailing list