2017-04-03 7 views
0

私はこのようなC++クラスメソッドがあります。Swigを使ってunsigned char *をPythonリストに変換するには?

class BinaryData 
{ 
public: 
    ... 
    void serialize(unsigned char* buf) const; 
}; 

serialize機能だけでunsigned char*としてバイナリデータを取得します。 SWIGを使ってこのクラスをラップします。 私はbyte arrayまたはint arrayというバイナリデータをPythonで読みたいと思います。

Pythonのコード:

buf = [1] * 1000; 
binData.serialize(buf); 

しかし、それはunsigned char*に変換することができない例外が発生します。 この関数をPythonでどのように呼び出すことができますか?行うには

答えて

1

最も簡単な方法は、Pythonの内側にそれを変換することです:

buf = [1] * 1000; 
binData.serialize(''.join(buf)); 

箱から出して動作しますが、Pythonのユーザーが期待しているものに応じて、潜在的に洗練されます。 SWIGを使用する回避策は、inside Python codeのいずれかです。例えば:

%feature("shadow") BinaryData::serialize(unsigned char *) %{ 
def serialize(*args): 
    #do something before 
    args = (args[0], ''.join(args[1])) 
    $action 
    #do something after 
%} 

または、生成されたインターフェイスコードの内部に。 buffers protocol使用して:あなたが好む

%typemap(in) unsigned char *buf %{ 
    // use PyObject_CheckBuffer and 
    // PyObject_GetBuffer to work with the underlying buffer 
    // AND/OR 
    // use PyIter_Check and 
    // PyObject_GetIter 
%} 

はこれを行うには、お好みのプログラミング言語およびその他の状況の特定の制約に基づいて個人的な選択です。

関連する問題