bytes aus C++ per boost returnen?

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
p90
User
Beiträge: 198
Registriert: Donnerstag 22. Juli 2010, 17:30

Hallo,

folgendes Problem:

Ich suche nach einer Möglichkeit, aus einer C++ Applikation bytes (also in dem Sinne von Python3 <bytes> zu returnen.
In Python2 war das kein problem, man musste die C++ Bytes in std::string wrappen und konnte das einfach returnen.
Durch die Änderung im Unicode Händling zwischen Python2 und Python3 funktioniert das aber nicht mehr da std::string nun auf Python str abgebildet wird.
Das ganze wird bei mir verwendet um Objekte zu picklen, wodurch alles in Python2 geht, Python3 aber einem ein "UniceodeEncodeError" beim picklen wirft.

Die Frage ist nun, wie löst man das?
Hab schon jede Menge gegooglet aber eien Lösung für diese vertrackte Situtaion konnte ich nicht finden.
Vielen Dank im Vorraus!
p91
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Python hat auch einen Datentypen für Bytes. Falls es ein String sein muss, dann bietet sich das Dekodieren mit ASCII an.
BlackJack

@snafu: Das weis p90 doch das es `bytes` gibt, und die Frage ist ja wie man aus C++ mit Boost `bytes` an Python 3 zurückgeben kann und *nicht* `str`.
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dann habe ich die Fragestellung anscheinend nicht wirklich durchschaut. Ich dachte, es geht um die Python-Seite bei dem Vorhaben. Tut mir leid, wenn mein Beitrag nicht so hilfreich war...
BlackJack

@p90: Hm, wenn Du schon viel gegooglet hast, dann kann der zweite Treffer bei meiner ersten Suchanfrage ja eigentlich keine Lösung enthalten, das wäre zu einfach, oder? :-)

Aber vielleicht ist Expose C++ buffer as Python 3 bytes ja doch das was Du suchst. (Und eventuell willst Du auch ein `memoryview` anstelle von `bytes`.)
Antworten