如何通过ctypes将列表(非空)从Python传递到C ++?

时间:2018-08-01 12:33:39

标签: python c++ ctypes

我有一些数据,格式为:

data = [[1,1,1],[2,2,2],[3,3,3]]

如何通过ctypes将其传递给C ++?

我可以像这样单独传递每个列表:

import ctypes

temp1 = [1,1,1]
temp2 = [2,2,2]
temp3 = [3,3,3]

list1 = (ctypes.c_int * 3)(*temp1)     #NO IDEA WHAT THE * MEANS
list2 = (ctypes.c_int * 3)(*temp2)
list3 = (ctypes.c_int * 3)(*temp3)

但是在那之后,如果我尝试将所有这些列表附加到'data'...

data.append(list1)
data.append(list2)
data.append(list3)

data_final = (ctypes.?????? * 3)(*data)

我应该在?????中输入哪种类型?谢谢

1 个答案:

答案 0 :(得分:1)

??????应该是ctypes.c_int * 3 * 3

data_final = (ctypes.c_int * 3 * 3)(*data)
[list(a) for a in data_final]
# --> [[1, 1, 1], [2, 2, 2], [3, 3, 3]]

记录下来,不要

data = []
data.append(list1)
data.append(list2)
data.append(list3)

这是python,而不是c ++,

data = [list1, list2, list3]

地狱,因为您只是要将其传递给函数做

data_final = (ctypes.c_int * 3 * 3)(list1, list2, list3)

并完全跳过data步骤


仅以最Python的方式,如果我在列表N x M的{​​{1}}列表中有数据,我就会这样做

py_list