ctypesモジュールを使用すると、POINTER(c_char)またはc_char_p型をPythonに簡単にインポートできますが、どちらも、値がゼロのバイトを含む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)あまりパイソンではないようで、2)永遠にかかります(私のMacでは640x480ブロックのピクセルデータの変換には約2秒かかります)。
スタックオーバーフローでこれに関する質問をたくさん見ましたが、どちらの人も「なぜそれをする必要があるのですか?」または「c_char_pはあなたが望むことをします」(私が上で説明したように、それはしません)。
私が見た唯一の信頼できるアドバイスは、ここで推奨されているように、c api PyString_FromStringAndSizeを使用することです:http: //www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/version/Doc/FAQ.html
ただし、これがどのように役立つかはわかりません。これは、Pythonの機能ではなくcythonの機能であるafaikだからです。
興味があるので、これを行う必要がある理由は、panda3dとkinectを使用しているためです。また、kinectcapiはunsignedchar*値の配列を提供し、panda3d apiは愛情を込めてsetPixels()呼び出しを提供します。引数としてのPython文字列。