由C PyBuffer的访问内容
-
22-09-2019 - |
题
我已经创建了一个缓冲对象在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 。
不隶属于 StackOverflow