我通过以下方式在Python中创建了一个ctype数组:
list_1 = [10, 12, 13]
list_1_c = (ctypes.c_int * len(list_1))(*list_1)
当我打印list_1_c的第一个元素时,我得到:
print list_1_c[0]
10
我的问题是为什么我没有得到结果?
c_long(10)
如果我这样做:
a = ctypes.c_int(10)
print a
我明白了
c_long(10)
我希望数组list_1_c的元素是ctypes元素。
答案 0 :(得分:1)
这些值在内部存储为3个元素的C整数数组,包装在ctypes数组类中。为数组建立索引会方便地返回Python整数。如果您从import psycopg2
conn=psycopg2.connect(database="your_database",user="postgres", password="",
host="127.0.0.1", port="5432")
cur = conn.cursor()
cur.execute("select * from your_table")
rows = cur.fetchall()
conn.close()
派生一个类,则可以取消该行为:
switch ([sender tag])
方便的原因是,除非您访问其包装的C类型值,否则您将无法做很多事,除非您访问其c_int
:
>>> import ctypes
>>> list_1 = [10, 12, 13]
>>> list_1_c = (ctypes.c_int * len(list_1))(*list_1)
>>> list_1_c # stored a C array
<__main__.c_long_Array_3 object at 0x00000246766387C8>
>>> list_1_c[0] # Reads the C int at index 0 and converts to Python int
10
>>> class x(ctypes.c_int):
... pass
...
>>> L = (x*3)(*list_1)
>>> L
<__main__.x_Array_3 object at 0x00000246766387C8>
>>> L[0] # No translation to a Python integer occurs
<x object at 0x00000246783416C8>
>>> L[0].value # But you can still get the Python value
10