私はoutdata3、outdata4の値をPythonコードから取得したいと考えています。 私はc関数を呼び出すためにctypesを使用しました。 C関数は以下のようなものです:Pythonからoutdata3、outdata4値を出力するにはどうしたらいいですか?
import numpy
import ctypes
indata1 = ctypes.c_int(8)
indata2 = ctypes.c_double(3.4)
#outdata3 = numpy.zeros((5), dtype=numpy.int)
#outdata4 = numpy.zeros((5), dtype=numpy.double)
lib = ctypes.cdll.LoadLibrary('./ctest.so')
fun = lib.cfunction
# Allocate array of int*
outdata3 = (ctypes.POINTER(ctypes.c_int) * 8)()
#for i in range(8):
# # Allocate arrays of int
# outdata3[i] = (ctypes.c_int * 8)()
# Allocate array of double*
outdata4 = (ctypes.POINTER(ctypes.c_double) * 8)()
#for i in range(8):
# # Allocate arrays of double
# outdata4[i] = (ctypes.c_double * 8)()
fun(ctypes.c_int(8), ctypes.c_double(3.4), ctypes.byref(outdata3), types.byref(outdata4))
#fun(ctypes.c_void_p(indata.ctypes.data), ctypes.c_int(5), ctypes.c_int(6),
# ctypes.c_void_p(outdata.ctypes.data))
#print('outdata3: ', outdata3.contents)
#print('outdata4: ', outdata4.contents)
def dump1(a,rows):
for i in range(rows):
print a[i]
def dump2(a,rows,cols):
for i in range(rows):
for j in range(cols):
print a[i][j]
dump1(outdata3, 8)
#dump1(outdata4, 8)
私はコードを上から下に得ることができます:コードの下
#include <stdio.h>
void cfunction(int indata1, double indata2, int * outdata3, double * outdata4)
{
int i;
for (i = 0; i < indata1; ++i)
{
outdata3[i] = indata1;
outdata4[i] = indata2;
//printf("indata3 [%d] = %d\n", i, outdata3[i]);
//printf("indata4 [%d] = %1.1f\n", i, outdata4[i]);
}
}
は、Pythonコードです。
[===>19:14:48]one+two:python test.py
<__main__.LP_c_long object at 0x93566ec>
<__main__.LP_c_long object at 0x93566ec>
<__main__.LP_c_long object at 0x93566ec>
<__main__.LP_c_long object at 0x93566ec>
<__main__.LP_c_long object at 0x93566ec>
<__main__.LP_c_long object at 0x93566ec>
<__main__.LP_c_long object at 0x93566ec>
<__main__.LP_c_long object at 0x93566ec>
ただし、次のような値が必要です。
0.0 1.0 2.0 3.0 4.0 5.0
1.0 2.0 3.0 4.0 5.0 6.0
2.0 3.0 4.0 5.0 6.0 7.0
3.0 4.0 5.0 6.0 7.0 8.0
4.0 5.0 6.0 7.0 8.0 9.0
これは明確なようだ:http://docs.python.org/library/ctypes.html#arraysて、http://ドキュメント。 python.org/library/ctypes.html#passing-pointers-or-passing-parameters-by-reference。どの部分が混乱していますか? '.value'を使ってポインタが指している値を見つけるはずですか? –