1

いくつかの python スクリプトと対話する C ライブラリにラッパー関数があります。

int func(uint8_t *_data, int _len);

Pythonの配列またはリストをこの関数に渡したいです。どうやってするの ?

4

1 に答える 1

1

C 配列型を作成する最も簡単な方法は、 の適切な型で乗算演算子を使用するctypesことです。これにより、新しい型オブジェクトが自動的に生成されます。例えば...

>>> import ctypes
>>> ctypes.c_ubyte * 3
<class '__main__.c_ubyte_Array_3'>

...同じ数の引数で構築できます...

>>> (ctypes.c_ubyte * 3)(0, 1, 2)
<__main__.c_ubyte_Array_3 object at 0x7fe51e0fa710>

...または、*演算子を使用して、リストの内容で呼び出すことができます...

>>> (ctypes.c_ubyte * 3)(*range(3))
<__main__.c_ubyte_Array_3 object at 0x7fe51e0fa7a0>

...だから、次のようなものが必要になります...

import ctypes

my_c_library = ctypes.CDLL('my_c_library.dll')

def call_my_func(input_list):
    length = len(input_list)
    array = (ctypes.c_ubyte * length)(*input_list)
    return my_c_library.func(array, length)

my_list = [0, 1, 2]
print call_my_func(my_list)
于 2013-05-27T16:09:10.763 に答える