使用ctypes在Python中访问c_char_p_Array_256

时间:2011-11-29 16:33:38

标签: python c ctypes

我有一个本地python桥接到一些C代码,它返回一个指向数组(结构数组)的指针。该结构包含一些字符数组(字符串)。但是如何从c_char_p_Array_NNN获得实际的Python字符串?

typedef struct td_Group
{
    unsigned int group_id;
    char groupname[256];
    char date_created[32];
    char date_modified[32];
    unsigned int user_modified;
    unsigned int user_created;
} Group;

int getGroups(LIBmanager *, Group **);

############# python code below: 
class Group(Structure):
    _fields_ = [("group_id", c_uint),
                ("groupname", c_char_p*256),
                ("date_created", c_char_p*32),
                ("date_modified", c_char_p*32),
                ("user_modified", c_uint),
                ("user_created", c_uint)]


def somefunc():
    myGroups = c_void_p()
    count = libnativetest.getGroups( nativePointer, byref(myGroups) )
    print "got " + str(count) + " groups!!"
    myCastedGroups = cast( myGroups, POINTER(Group*count) )
    for x in range(0,count):
        theGroup = cast( myCastedGroups[x], POINTER(Group) )
        theGroupName = theGroup.contents.groupname 
        ### Now how do I access theGroupName as a python string?
        # it is a c_char_p_Array_256 presently

1 个答案:

答案 0 :(得分:1)

类型应该是c_char*256,而不是c_char_p*256,因为它是char[256],而不是char *[256]

string_at(theGroupName, sizeof(theGroupName))