java将jchararray分配给常量unsigned char
我将char[]从java传递到jni:
function(char [] aChar);
然后我在jni上读了char[]:
JNIEXPORT jbyteArray JNICALL
packagename_function(JNIEnv *env, jobject obj, jcharArray aChar) {
const unsigned char *theValue;
}
现在我想指定aChar作为该值的一个值
正确的分配方式是什么
# 1 楼答案
在java端,字符是用UTF16编码的,是计数器部分,jni端是无符号短字符,而不是无符号字符,所以我认为如果要将java端字符数组设置为jni端,有两个选项: 1.在java中,使用UTF8编码将字符数组转换为字节数组。 2.或者在jni端,将UTF16编码字符串转换为UTF8字符串。 我认为前面的选择更方便
# 2 楼答案
这里有两个选项:
您可以传递数组(正如您所做的),然后需要检索它的元素:
http://jnicookbook.owsiak.org/recipe-No-012/
可以将字符作为字符串对象传递
http://jnicookbook.owsiak.org/recipe-No-009/
在将字符串从Java传递到C的情况下,您必须更改两件事:
您需要将方法签名更改为
在Java代码中,必须从字符创建字符串
然后,将其传递给本机代码
注意!小心长度!你可以在这里查看:
https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html
# 3 楼答案
感谢@mko给了我这个想法。我的最终代码是: