美好的一天
我有一个问题如何将我的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数组
比你
答案 0 :(得分:1)
这将是:
Java_com_kru13_ndkdemos_MainActivity_JNIEncrypt( JNIEnv* env, jobject obj, jcharArray array)
在函数内部,您必须使用env->GetCharArrayElements(...)
。
答案 1 :(得分:0)
为什么不把它作为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);
答案 2 :(得分:0)
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);