質問

次のように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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top