Zugang Inhalt PyBuffer von C
-
22-09-2019 - |
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
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 .