首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从ctype数组中获取ctype类型对象

如何从ctype数组中获取ctype类型对象
EN

Stack Overflow用户
提问于 2012-03-29 18:42:02
回答 1查看 3.8K关注 0票数 1

实际上,我正在尝试将ctype数组转换为python列表并返回。

如果被发现,this thread。但是它假设我们在编译时知道类型。

但是,是否有可能检索元素的ctype类型?

我有一个至少包含一个元素的python列表。我想做这样的事

代码语言:javascript
复制
import ctypes
arr = (type(pyarr[0]) * len(pyarr))(*pyarr)

这显然不起作用,因为type()不返回一个与ctype兼容的类。但是,即使列表包含直接从ctype创建的对象,上面的代码也不能工作,因为它是类型的对象实例。

有什么办法来执行这个任务吗?

编辑

好的,这是对我有用的代码。我使用它将输入分区从comtype服务器方法转换为python列表,并将值返回到数组指针:

代码语言:javascript
复制
def list(count, p_items):
    """Returns a python list for the given times represented by a pointer and the number of items"""
    items = []
    for i in range(count):
        items.append(p_items[i])
    return items

def p_list(items):
    """Returns a pointer to a list of items"""
    c_items = (type(items[0])*len(items))(*items)
    p_items = cast(c_items, POINTER(type(items[0])))

    return p_items

如前所述,p_list(items)至少需要一个元素。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-30 00:48:39

我认为这是不可能的,因为多个类型映射到单个Python类型。例如,c_ int /c_long/c_ulong/c_ulonglong都映射到Python。你会选择哪种类型?您可以创建您的首选项的地图:

代码语言:javascript
复制
>>> D = {int:c_int,float:c_double}
>>> pyarr = [1.2,2.4,3.6]
>>> arr = (D[type(pyarr[0])] * len(pyarr))(*pyarr)
>>> arr
<__main__.c_double_Array_3 object at 0x023540D0>
>>> arr[0]
1.2
>>> arr[1]
2.4
>>> arr[2]
3.6

此外,无文档的_type_可以告诉ctype数组的类型。

代码语言:javascript
复制
>>> arr._type_
<class 'ctypes.c_double'>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9931452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档