Pregunta

He creado un objeto de memoria intermedia en Python, así:

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

Ahora estoy pasando byte_stream como un parámetro para una función de C, a través de SWIG. Tengo un typemap para convertir los datos que tiene este aspecto:

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

He intentado algunas cosas diferentes de errores no puedan llegar al contenido / valor real de mi byte_stream. ¿Cómo convierto o acceder al contenido de mi byte_stream mediante la API de C? Hay muchos métodos diferentes para la conversión de un conjunto de datos a un búfer C, pero ninguno que puedo encontrar para ir al otro en torno manera. He intentado buscar en este objeto en GCB, pero ni él ni los valores que lo han generado contener mis datos.

(estoy usando tampones porque quiero evitar la sobrecarga de la conversión de los datos a una cadena cuando se lee desde el archivo) Estoy usando Python 2.6 en Linux.

- Gracias Pavel

¿Fue útil?

Solución

  

Estoy usando tampones porque quiero   evitar la sobrecarga de la conversión de la   los datos a una cadena al leerlo desde   el archivo

No está evitando cualquier cosa. La cadena ya está construida por el método read(). Llamando buffer() simplemente construye un objeto que apunta tampón adicional a esa cadena.

En cuanto a conseguir en la memoria apuntada por el objeto de amortiguamiento, tratar PyObject_AsReadBuffer(). Ver también http://docs.python.org/c-api/objbuffer.html .

Otros consejos

Una vez que se utiliza el método read en su objeto de archivo, los datos se convierte en un objeto str; llamar al método buffer no convertirla en una corriente de ningún tipo. Si se quiere evitar la sobrecarga de crear el objeto de cadena, usted podría simplemente pasar el objeto de archivo en el código C y luego usarlo a través de su C API .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top