2016-04-26 14 views
9

私はCモジュールの関数の引数としてuint8_tの配列を渡したいと思います。Pythonエクステンションでuint8_tを扱う方法は?

この配列を直接解析するメソッドが見つかりませんでした。そのため、PyObject_tに解析してPyTuple_tオブジェクトとして反復処理しています。このようにして、このタプルの各要素PyObject_tをuint8_tにキャストする必要があります。

PyInt_FromUINT8_t関数などの関数がないとどうしたらいいですか?

答えて

5

通常、Bで手に入るのはunsigned charです。 Parsing Argumentsによると、あなただけ行うことができる必要があります:

uint8_t b; 
if (!PyArg_ParseTuple("b", &b)) { 
    return NULL; 
} 

直接単にPyInt_*PyLong_*またはPyNumber_*機能の一つ(https://docs.python.org/3/c-api/number.html?highlight=pynumber#c.PyNumber_AsSsize_t)を使用

、例えばあなたが PyObjectを扱っている(引数を使用していない場合。

PyObjectuin8_tから変換すると、あなたは私が配列で働いているPyInt_FromLongまたはPyLong_FromLong

+0

を使用することができ、同様に簡単です。この場合、PyInを使用してPyTupleかPyListを反復処理しますt_FromLongは無効なメモリアクセスを引き起こしませんか? この関数は4バイトまたは8バイトを読み込もうとしますが、リストの各要素は1バイトしか割り当てられません。 –

+0

'PyXXX'関数はどれも整数へのポインタを使用しませんが、単純にそれらを値で返します。例えば ​​'PyInt_FromLong'は引数として' int'を受け取り、通常の型変換と整数型変換を受けます。あなたは何をしようとしているのかもう少し説明できますか? –

+0

私は質問を更新しました。それがはっきりしているかどうか確認してください。 –

関連する問題