我已经创建了一个缓冲对象在python像这样:

f = io.open('some_file', 'rb')
byte_stream = buffer(f.read(4096))

我现在正在byte_stream作为参数C函数,通过SWIG。我有一个类型映射用于将看起来像这样的数据:

%typemap(in) unsigned char * byte_stream {
    PyObject *buf = $input;
    //some code to read the contents of buf
}

我已经尝试了一些不同的事情的错误不能得到我的byte_stream的实际内容/值。如何转换或访问使用C API我byte_stream的内容?有一个C数据转换为缓冲区,但没有,我能找到走另一条路各地的许多不同的方法。 我已经试图寻找在此对象在GCB但既不它,或者它指向包含我的数据的值。

(我使用的缓冲液,因为我想从文件读出时,以避免将所述数据转换为字符串的开销) 我使用Linux上蟒2.6。

- 感谢的Pavel

有帮助吗?

解决方案

  

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

您是不是在回避什么。该字符串已经被read()方法建造。主叫buffer()刚刚建立附加的缓冲对象指向该字符串。

至于在存储器获取指向的缓冲器对象,尝试PyObject_AsReadBuffer()。也参见 http://docs.python.org/c-api/objbuffer.html

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top