在JNI中将jchararray转换为jstring

时间:2018-05-20 05:31:49

标签: c java-native-interface

我在代码下使用JNI将jchararray转换为jstring,但我只获得Linux中的第一个字符。

 char *carr =(char*)malloc(length+1);
(*env)->GetCharArrayRegion(env, ch, 0, length, carr);
return  (*env)->NewStringUTF(env, carr);

2 个答案:

答案 0 :(得分:1)

GetCharArrayRegion返回Java字符,即 UTF-16 代码点。和jchar在JNI中,并且它们不是以空值终止的,并且您不能使用NewStringUTF,它期望以修改 UTF-中包含字节的以空字符结尾的字符串8编码。

首先,分配正确的内存量

jchar *carr = malloc(length * sizeof(jchar));

然后执行GetCharArrayRegion

(*env)->GetCharArrayRegion(env, ch, 0, length, carr);

然后注意你有一个UTF-16字符数组。如果第一个字符属于ASCII范围,并且体系结构是little-endian,则预期您只是“获取第一个字符”,因为第一个{{1}的MSB 字节将为零,NewStringUTF会认为这是终结符。请改用NewString

jchar

答案 1 :(得分:0)

你应该使用 NewString()函数,它接受 jchar 数组及其长度。 NewStringUTF()函数将UTF-8编码的C字符串作为输入。

有关详细信息,请参阅https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html#zz-4.2