Seite 1 von 1

bytes aus C++ per boost returnen?

Verfasst: Mittwoch 11. Januar 2017, 22:54
von p90
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

Re: bytes aus C++ per boost returnen?

Verfasst: Donnerstag 12. Januar 2017, 09:31
von snafu
Python hat auch einen Datentypen für Bytes. Falls es ein String sein muss, dann bietet sich das Dekodieren mit ASCII an.

Re: bytes aus C++ per boost returnen?

Verfasst: Donnerstag 12. Januar 2017, 09:52
von 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`.

Re: bytes aus C++ per boost returnen?

Verfasst: Donnerstag 12. Januar 2017, 09:55
von snafu
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...

Re: bytes aus C++ per boost returnen?

Verfasst: Donnerstag 12. Januar 2017, 10:04
von 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`.)