Java JNI将jstring转换为char*
通过使用JNI,我将一个URL字符串作为Java JNI将jstring转换为char*,java,java-native-interface,Java,Java Native Interface,通过使用JNI,我将一个URL字符串作为jstring数据类型从Java传递到C代码。我的库方法需要一个char*作为url 如何在char*中转换jstring 附言:在C中使用jcharArray有什么好处吗?(即,在本机方法中传递char[]而不是字符串)以下是我在开始使用JNI时发现的几个有用的链接 关于你的问题,你可以用这个 JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstr
jstring
数据类型从Java传递到C代码。我的库方法需要一个char*
作为url
如何在char*
中转换jstring
附言:在C中使用jcharArray有什么好处吗?(即,在本机方法中传递
char[]
而不是字符串)以下是我在开始使用JNI时发现的几个有用的链接
关于你的问题,你可以用这个
JNIEXPORT void JNICALL Java_ClassName_MethodName(JNIEnv *env, jobject obj, jstring javaString)
{
const char *nativeString = env->GetStringUTFChars(javaString, 0);
// use your string
env->ReleaseStringUTFChars(javaString, nativeString);
}
首先感谢杰森·罗杰斯的回答 在Android中和cpp中应该是:
const char *nativeString = env->GetStringUTFChars(javaString, nullptr);
// use your string
env->ReleaseStringUTFChars(javaString, nativeString);
可以修复此错误:
1.错误:'->'的基操作数具有非指针类型“JNIEnv{aka_JNIEnv}”
2.错误:调用“\u JNIEnv::GetStringUTFChars(JNIEnv*&,\u jstring*&,bool)”时没有匹配的函数
3.错误:调用“\u JNIEnv::ReleaseStringUTFChars(JNIEnv*&,\u jstring*&,char const*&)”时没有匹配的函数
4.在末尾添加“env->DeleteLocalRef(nativeString);”。是否需要保持
nativeString
恒定?如果检查第二个链接,函数GetStringUTFChars的原型是:const jbyte*GetStringUTFChars(JNIEnv*env,jstring string,jboolean*isCopy);因此,你没有真正的选择。我认为值得注意的是,这里(以及维基百科页面上)概述的技术使用了改进的UTF-8编码,这可能不适用于所有情况。请看,谢谢,这项工作,但有趣的是,const char*无法转换为char*:)。@从技术上讲,它可以使用一些魔法,但这是最好避免的;它被声明为const
可能是有原因的。对问题的正确响应是将strcpy
从const char*
转换为char*
。这应该为您提供您想要的可变代码> char */COD>。您需要(*Env)->而不是EnV-> >您只需要使用代码>(*Env)-> /Cord>如果您使用C,而不是C++。如何将字符串转换为Sa256?我不能这样做,PLS帮助NDK ANDROND中的新成员您是否考虑过查阅文档?