ctypesモジュールを使用すると、POINTER(c_char)型やc_char_p型をPythonに簡単にインポートできますが、どちらもゼロ値バイトを含むPython文字列で終わることはありません。どのように0 *バイトのchar *をPython文字列に変換しますか?
c_char_pはゼロで終了します。つまり、Cのchar *配列は最初のゼロ値で終了します。
POINTER(c_char)は0値を持つことができるバイナリデータをインポートするための推奨方法ですが、これを直接Python文字列に変換する方法はないようです。
私はこれを行うことができます。
pixels = clibblah.get_pixels()
a = ""
for i in range(0, clibblah.get_pixel_length()):
a += pixels[i]
...しかし、この1)は非常にpythonyをいないようだ、と2)永遠に取る(画素データの640×480のブロックは、私のMac上では約2秒かかり変換)。
スタックオーバフローに関してこれに関する質問がたくさんありましたが、どちらかの人が「なぜあなたはそれをする必要がありますか?または "c_char_pはあなたが望むことをする"(これは私が上で説明した通りではありません)。
私が見てきた唯一の信頼できるアドバイスは、ここで推奨されているように、C言語のAPI PyString_FromStringAndSizeを使用することです: http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/version/Doc/FAQ.html
は本当に私の知る限りそれはcython機能、ではないのpythonだからそれは、しかしどのように役立つかを見ることができません1。
私はこれをやる必要がある理由は、私はpanda3dとkinectで作業しています。kinect c apiはunsigned char *値の配列を提供し、panda3d apiは素敵なsetPixels()呼び出しを提供しますPythonの文字列を引数として取ります。
これは役立つかもしれない:http://stackoverflow.com/questions/5047536/how-do-i-build-a-python-string-from-a-raw-binary-ctype-buffer –
それをかもしれませんあなたが働きたいと思うコードを提供するのにも役立ちますが、そうではありません。だから、私たちはあなたがどのようにしてそれを一緒に掛ける必要性/望みのよいアイデアを得ることができるのです。 –