Question

I ai créé un objet de mémoire tampon en python comme ceci:

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

Je passe maintenant byte_stream comme paramètre à une fonction C, par SWIG. J'ai un typemap pour convertir les données qui ressemble à ceci:

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

Je l'ai essayé quelques différents bug de choses ne peut pas arriver au contenu réel / valeur de mon byte_stream. Comment puis-je convertir ou accéder au contenu de mon byte_stream en utilisant l'API C? Il existe de nombreuses méthodes pour convertir des données C à un tampon, mais aucun que je peux trouver pour aller dans l'autre sens. Je l'ai essayé de regarder cet objet dans GCB mais ni, ou les valeurs qu'il contient mes Points de données.

(j'utilise des tampons parce que je veux éviter la surcharge de convertir les données en une chaîne lors de la lecture à partir du fichier) J'utilise Python 2.6 sous Linux.

- Merci Pavel

Était-ce utile?

La solution

  

J'utilise des tampons parce que je veux   éviter la surcharge de la conversion du   données à une chaîne lors de la lecture de   le fichier

Vous n'êtes pas quoi que ce soit évites. La chaîne est déjà construite par la méthode read(). L'appel buffer() construit juste un objet tampon supplémentaire pointant vers cette chaîne.

En ce qui concerne l'obtention à la mémoire pointée par l'objet tampon, essayez PyObject_AsReadBuffer(). Voir aussi http://docs.python.org/c-api/objbuffer.html .

Autres conseils

Dès que vous utilisez la méthode read sur votre objet fichier, les données seront converties en un objet str; appelant la méthode buffer ne convertit pas en un flux de toute nature. Si vous voulez éviter les frais généraux de la création de l'objet chaîne, vous pouvez simplement passer l'objet de fichier à votre code C et ensuite l'utiliser via son API C .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top