2

我在 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。

-- 谢谢帕维尔

4

2 回答 2

2

我正在使用缓冲区,因为我想避免在从文件中读取数据时将数据转换为字符串的开销

你没有回避任何事情。该字符串已由该read()方法构建。调用buffer()只是构建一个指向该字符串的附加缓冲区对象。

至于获取缓冲区对象指向的内存,试试PyObject_AsReadBuffer(). 另请参阅http://docs.python.org/c-api/objbuffer.html

于 2010-02-04T15:05:11.913 回答
1

只要您read在文件对象上使用该方法,数据就会被转换为str对象;调用该buffer方法不会将其转换为任何类型的流。如果您想避免创建字符串对象的开销,您可以简单地将文件对象传递给您的 C 代码,然后通过其 C API使用它。

于 2010-01-24T21:31:51.017 回答