contenuto Accesso di PyBuffer da C
-
22-09-2019 - |
Domanda
ho creato un oggetto di buffer in pitone in questo modo:
f = io.open('some_file', 'rb')
byte_stream = buffer(f.read(4096))
Ora sto passando byte_stream
come parametro a una funzione C, attraverso SWIG. Ho un typemap per la conversione dei dati che assomiglia a questo:
%typemap(in) unsigned char * byte_stream {
PyObject *buf = $input;
//some code to read the contents of buf
}
Ho provato un paio di cose diverse bug non può raggiungere il contenuto / valore effettivo della mia byte_stream. Come faccio a convertire o accedere al contenuto della mia byte_stream
utilizzando l'API C? Ci sono molti metodi diversi per la conversione di un dato C in un buffer ma nessuno che posso trovare per andare il contrario.
Ho provato a guardare questo oggetto in GCB ma né esso, oppure i valori punta a contenere i miei dati.
(sto usando tamponi perché voglio evitare il sovraccarico di convertire i dati in una stringa durante la lettura dal file) Sto usando Python 2.6 su Linux.
- Grazie Pavel
Soluzione
sto usando tamponi perché voglio evitare il sovraccarico di conversione del i dati in una stringa durante la lettura da il file
Non sei evitando tutto ciò. La stringa è già costruito con il metodo read()
. Chiamando buffer()
solo costruisce un oggetto ulteriore buffer che punta a quella stringa.
Come per arrivare alla memoria indicato dall'oggetto tampone, provare PyObject_AsReadBuffer()
. Vedi anche http://docs.python.org/c-api/objbuffer.html .
Altri suggerimenti
Non appena si utilizza il metodo read
sul vostro oggetto file, i dati verranno convertiti in un oggetto str
; chiamando il metodo buffer
non converte in un flusso di qualsiasi tipo. Se si vuole evitare il sovraccarico di creazione dell'oggetto stringa, si può semplicemente passare l'oggetto file per il codice C e quindi utilizzarlo tramite C sua API .