Android将char数组发送到JNI c ++

时间:2014-04-25 17:17:03

标签: java android c++ java-native-interface

美好的一天

我有一个问题如何将我的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数组

比你

3 个答案:

答案 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);