C から PyBuffer の内容にアクセスする
-
22-09-2019 - |
質問
次のようにPythonでバッファオブジェクトを作成しました。
f = io.open('some_file', 'rb')
byte_stream = buffer(f.read(4096))
今は通り過ぎています byte_stream
SWIG を介して C 関数へのパラメータとして。次のようなデータを変換するためのタイプマップがあります。
%typemap(in) unsigned char * byte_stream {
PyObject *buf = $input;
//some code to read the contents of buf
}
バグがbyte_streamの実際のコンテンツ/値に到達できないことをいくつか試してみました。私のコンテンツを変換またはアクセスするにはどうすればよいですか byte_stream
C API を使用しますか?C データをバッファに変換する方法はたくさんありますが、その逆の方法は見つかりません。gcb でこのオブジェクトを見てみましたが、オブジェクトにも、それが指す値にもデータが含まれていませんでした。
(ファイルから読んでいるときにデータを文字列に変換するオーバーヘッドを避けたいので、バッファーを使用しています)LinuxでPython 2.6を使用しています。
- パベルに感謝します
解決
私がしたいので、私はバッファを使用しています 変換のオーバーヘッドを回避 からそれを読んで、文字列へのデータ ファイル
あなたは何を回避されていません。文字列はすでにread()
法により構築されています。 buffer()
を呼び出すと、ちょうどその文字列を指す追加のバッファオブジェクトを構築します。
としては、バッファオブジェクトによって、PyObject_AsReadBuffer()
をしようと指摘しました。 http://docs.python.org/c-api/objbuffer.htmlも参照してください。
他のヒント
使用するとすぐに、 read
ファイル オブジェクトのメソッドを使用すると、データは str
物体;を呼び出す buffer
メソッドはそれをいかなる種類のストリームにも変換しません。文字列オブジェクト作成のオーバーヘッドを回避したい場合は、単純にファイル オブジェクトを C コードに渡し、それを次のように使用できます。 C API.