使用 ctypes 在 Python 中访问 c_char_p_Array_256
我有一个连接到一些 C 代码的本机 python 桥,它返回一个指向数组(结构数组)的指针。该结构体包含一些字符数组(字符串)。但是如何从 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
I have a native python bridge to some C code, which returns a pointer to an array (array of structs). The struct contains some character arrays (strings). But how can I get from a c_char_p_Array_NNN
to an actual Python string?
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
类型应为
c_char*256
,而不是c_char_p*256
,因为它是char[256]
,而不是char *[ 256]
。string_at(theGroupName, sizeof(theGroupName))
The type should be
c_char*256
, notc_char_p*256
, because it's achar[256]
, not achar *[256]
.string_at(theGroupName, sizeof(theGroupName))