Konvertiere char * in jstring in JNI, wenn char * mit va_arg übergeben wird

9

Ist es notwendig, char * in jbyteArray umzuwandeln, dann den Konstruktor von java String aufzurufen, um ein jstring zu generieren? Wie sonst kann es gemacht werden? Bitte helfen Sie.

%Vor%     
user2358330 05.06.2013, 11:58
quelle

3 Antworten

31

Sie können einfach die JNI API-Dokumentation überprüfen. Z.B. Hier .
Sie werden finden:

%Vor%

Also musst du es so machen:

%Vor%     
mkaes 05.06.2013 12:09
quelle
6

Dies hängt von der Art der char * -Zeichenfolge ab. NewStringUTF kopiert von einer 0-terminierten, modifizierten UTF-8 Codierung von Unicode-Zeichen. NewString kopiert von einer gezählten, UTF-16 Codierung von Unicode-Zeichen. Wenn Sie keines von beiden haben, müssen Sie eine Konvertierung durchführen.

Viel Code, der NewStringUTF verwendet, wird mit der Annahme geschrieben, dass die Zeichenfolge NULL-terminiertes ASCII ist. Wenn diese Annahme richtig ist, wird es funktionieren, weil die modifizierte UTF-8-Codierung und die ASCII-Codierung die gleiche Byte-Sequenz erzeugen würden. Ein solcher Code sollte eindeutig kommentiert werden, um die Beschränkung der String-Daten zu dokumentieren.

Die Konvertierungsmethode, die Sie zum Aufrufen von Java-Funktionen verwenden (z. B. String (Byte [] Bytes, Charset Zeichensatz) ) - ist ein guter. Eine Alternative (in Windows sehe ich, dass Sie Visual Studio verwenden) ist MultiByteToWideChar . Eine andere Alternative ist iconv.

Unterm Strich: Sie müssen wissen, was Zeichensatz und Codierung Ihre Zeichenfolge ist verwendet und konvertiert es dann in einen UTF-16-codierten Unicode zur Verwendung als Java-String.

    
Tom Blodget 05.06.2013 17:02
quelle
3

es ist besser, byte[] an java als an jstring zurückzugeben, da der Unterschied zwischen der UTF-Zeichenkette in Java und der c-Zeichenkette viel einfacher ist, um das Kodierungsproblem in Java zu lösen

in Java:

%Vor%

in C ++:

%Vor%

wieder in Java:

%Vor%     
zyanlu 09.05.2014 03:44
quelle

Tags und Links