[英]Android send char array to JNI c++
美好的一天
我有一个问题如何将我的char数组发送到jni c ++代码? 我知道如何只发送int号码。
具有此数组char[] chars = password.toCharArray();
和private native void JNIEncrypt(char[] chars);
我的JNI方法看起来像这样
Java_com_kru13_ndkdemos_MainActivity_JNIEncrypt( JNIEnv* env, jobject obj, ?????)
我想问一下它应该怎么看JNI方法? 我需要在C ++代码中使用char数组
比你
这将是:
Java_com_kru13_ndkdemos_MainActivity_JNIEncrypt( JNIEnv* env, jobject obj, jcharArray array)
在函数内部,您将必须使用env->GetCharArrayElements(...)
。
为什么不将其作为String
传递,在JNI中为jstring
:
// Java side
private native void JNIEncrypt(String password);
// Native JNI side
Java_com_kru13_ndkdemos_MainActivity_JNIEncrypt(JNIEnv* env, jobject thiz, jstring password);
然后,您可以通过GetStringChars ()和相关或GetStringUTFChars ()访问字符串JNI端。 例如:
const char* utf8 = env->GetStringUTFChars(password, NULL);
// do something with utf8
env->ReleaseStringUTFChars(password, utf8);
toCharArray
从字符串中获取Unicode / UTF-16代码单元的序列。 在Android上,您可能希望在C ++端使用Unicode / UTF-8,但这取决于要使用的C ++库。 一旦知道,就可以使用Java String
类来获取字节。
注意: GetStringUTFChars
为您提供了已修改的UTF-8代码单元,兼容Unicode的库拒绝许多字符。
private void JNIEncrypt(String string) {
JNIEncrypt(string.getBytes("UTF-8"));
// Or, for the OS default, string.getBytes()
}
private native void JNIEncrypt(byte[] chars);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.