jni中返回jstring供java使用
1.string转char *,char *转jstring
// 将char *转为jstring
jstring charTojstring(JNIEnv* env, const char* pat)
{
//定义java String类 strClass
jclass strClass = (env)->FindClass("Ljava/lang/String;");
//获取String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String
jmethodID ctorID = (env)->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
//建立byte数组
jbyteArray bytes = (env)->NewByteArray(strlen(pat));
//将char* 转换为byte数组
(env)->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*) pat);
// 设置String, 保存语言类型,用于byte数组转换至String时的参数
jstring encoding = (env)->NewStringUTF("GB2312");
//将byte数组转换为java String,并输出
return (jstring) (env)->NewObject(strClass, ctorID, bytes, encoding);
}
// 先将string转为char *,再将char *转为jstring
jstring stringToJstring(JNIEnv* env,std::string str)
{
// string 转 char*
const char* chardata = str.c_str();
// char* 转 jstring
jstring jstr = charTojstring(env, chardata);
return jstr;
}
2.基础数据类型转jstring并在java中使用
std::to_string()可以自适应的将以下类型转换为string
- string to_string (int val);
- string to_string (long val);
- string to_string (long long val);
- string to_string (unsigned int val);
- string to_string (unsigned long val);
- string to_string (unsigned long long val);
- string to_string (float val);
- string to_string (double val);
- string to_string (long double val);
// 直接调动文章上方函数,即可返回jstring
JNIEXPORT jstring JNICALL Java_test_stringFromJNI(JNIEnv *env, jclass jcls) {
return stringToJstring(env,std::to_string(-5));
}
package test;
public class testString {
static {
System.loadLibrary("你打包的jni库");
}
public static void print() {
System.out.println(stringFromJNI());
}
public static native String stringFromJNI();
}
参考:
https://blog.csdn.net/caimouse/article/details/78833505
https://www.cnblogs.com/johngu/p/7878029.html
https://blog.csdn.net/mars_xiaolei/article/details/80855587
https://blog.csdn.net/uper945/article/details/1935706?utm_source=blogxgwz1
https://blog.csdn.net/xlxxcc/article/details/51106721