Frage

Ich habe ein Puffer-Objekt in Python erstellt wie folgt:

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

Ich bin vorbei jetzt byte_stream als Parameter an eine C-Funktion, durch SWIG. Ich habe einen typemap für die Daten umzuwandeln, die wie folgt aussehen:

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

Ich habe versucht, ein paar andere Dinge Fehler nicht auf den tatsächlichen Inhalt / Wert meiner byte_stream bekommen kann. Wie konvertiere ich oder Zugriff auf den Inhalt meiner byte_stream die C-API verwenden? Es gibt viele verschiedene Methoden für ein C-Daten in einen Puffer Umwandlung aber nicht, dass ich für den Gang umgekehrt finden. Ich habe in diesem Objekt in gcb versucht suchen, aber weder sie, oder die Werte, die sie zeigt meine Daten enthalten.

(Ich verwende Puffer, weil ich den Aufwand für die Umwandlung der Daten in eine Zeichenfolge vermeiden will, wenn es aus der Datei zu lesen) Ich verwende Python 2.6 auf Linux.

- Dank Pavel

War es hilfreich?

Lösung

  

Ich bin mit Puffer weil ich es will   vermeiden den Aufwand der Umwandlung von   Daten in einen String beim Lesen aus   die Datei

Sie sind zu vermeiden nichts. Die Zeichenfolge wird bereits durch die read() Verfahren gebaut. Der Aufruf buffer() baut nur ein zusätzliches Puffer-Objekt zeigt auf diese Zeichenfolge.

Was bei der Erinnerung immer darauf durch das Puffer-Objekt, versucht PyObject_AsReadBuffer(). Siehe auch http://docs.python.org/c-api/objbuffer.html .

Andere Tipps

Sobald Sie die read Methode auf Dateiobjekt verwenden, werden die Daten an ein str Objekt umgewandelt werden; Aufruf der buffer Methode nicht, es in einen Strom von jeder Art konvertieren. Wenn Sie den Aufwand für die Erstellung der String-Objekt vermeiden möchten, können Sie einfach die Datei Objekt in den C-Code übergeben und dann verwenden, über sein C-API .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top