Доступ к содержимому PyBuffer из C
Я создал буферный объект в 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. Как я могу конвертировать или получить доступ к содержанию моего byte_stream
используя C API? Есть много разных методов для преобразования данных C в буфер, но я не могу найти ни одного другого способа обхода. Я попытался посмотреть на этот объект в gcb, но ни он, ни значения, на которые он указывает, содержат мои данные.
(Я использую буферы, потому что я хочу избежать затрат на преобразование данных в строку при чтении их из файла). Я использую python 2.6 в Linux.
- Спасибо, Павел
2 ответа
Я использую буферы, потому что я хочу избежать затрат на преобразование данных в строку при чтении их из файла
Вы ничего не избегаете. Строка уже построена read()
метод. призвание buffer()
просто создает дополнительный буферный объект, указывающий на эту строку.
Что касается получения в памяти, на которую указывает объект буфера, попробуйте PyObject_AsReadBuffer()
, Смотрите также http://docs.python.org/c-api/objbuffer.html.
Как только вы используете read
метод в вашем файловом объекте, данные будут преобразованы в str
объект; вызывая buffer
Метод не преобразует его в поток любого вида. Если вы хотите избежать накладных расходов на создание строкового объекта, вы можете просто передать файловый объект в ваш C-код и затем использовать его через C API.