C ++ std :: string zu jstring mit fester Länge

9

Ich versuche, einen C ++ std :: string in einen jstring umzuwandeln und es zurückzugeben. Das wäre einfach mit

%Vor%

aber das Problem ist, dass die Zeichenfolge, die ich konvertiere, fast zufällig leere Zeichen darin durchsetzt hat. Dies ist ein Problem für c_str() , aber nicht für std::string . NewStringUTF fängt nur einen Teil des gesamten std::string ab. Es besteht die Hoffnung, dass std::string eine length() -Funktion hat, die die volle Länge erhält und die problematischen char * length() -Zeichen ignoriert.

Es gibt eine separate Funktion NewString , die benötigt wird in einem jchar * und einer jsize *, also sieht das vielversprechend aus, aber ich kann die std :: string nicht richtig in den jchar * konvertieren. Ich habe versucht, es zu einem Byte-Array zu machen, aber ich habe es wahrscheinlich nicht richtig gemacht. Ich hatte weitere Probleme, das int von vector<char> byteArray(stdString.begin(), stdString.end()) in eine jsize zu konvertieren, die für den NewString-Aufruf erforderlich war.

Ich habe ein bisschen mit std::string gearbeitet, aber das hat mich nicht sehr weit gebracht, wahrscheinlich weil das die ursprüngliche Zeichenkette zerstört.

Hier ist die grundlegende Startfunktion, die ich mit Strings ohne Nullzeichen hatte:

%Vor%

Als Nebenbemerkung wird diese Funktion in einer JNI-Wrapper-Datei verwendet, um das %code% eines Objekts zurückzugeben.

Danke für Hilfe oder Informationsquellen!

    
Eli Rising 04.12.2014, 20:23
quelle

1 Antwort

4

Ich habe meine eigene Workaround-Lösung unter Berücksichtigung der Empfehlungen von RedAlert entwickelt.

Java erwartet nun ein Byte [] vom nativen Aufruf:

%Vor%

Die toString-Methode ruft diese Methode nun in einem std::string :

auf %Vor%

Und die Java-Ebene empfängt die Daten wie folgt:

%Vor%     
Eli Rising 04.12.2014 23:07
quelle

Tags und Links