在使用jni调用时经常遇到数据类型转换问题,以下是char*与jstring相互转换的代码: //java字符串转C字符串 char* jstringTostr(JNIEnv* env, jstring jstr) { char* pStr = NULL; jclass jstrObj = (*env)->FindClass(env, "java/lang/String"); jstring encode = (*env)->NewStringUTF(env, "utf-8")...
jstring result=(env)->NewStringUTF(env,libCode); 我用的C++来写的,所以使用的是这种写法,然后运行,报错 no matching function for call to '_JNIEnv::NewStringUTF(JNIEnv&, char&)' 然后还是百度 QQ图片20180111121005.png StackOverFlow 真不是我捧它,技术解决方案,绝对算得上神器中的神器。
char* jstringtochar( JNIEnv *env, jstring jstr ) { char* rtn = NULL; jclass clsstring = (*env)->FindClass(env,"java/lang/String"); jstring strencode = (*env)->NewStringUTF(env,"utf-8"); jmethodID mid = (*env)->GetMethodID(env,clsstring, "getBytes", "(Ljava/lang/String;)[B...
(JNIEnv *env, jclass obj, jstring jstr1, jstring jstr2) { jbyteArray bytes = 0; jthrowable exc; char *pszResult = NULL; char *pszSTR1 = NULL; char *pszSTR2 = NULL; pszSTR1 = jstringTostring(env, jstr1); pszSTR2 = jstringTostring(env, jstr2); int nlen = sizeof(char)*(...
//建立byte数组 jbyteArray bytes = (env)-NewByteArray((jsize)strlen(pat));//将char* 转换为byte数组 (env)-SetByteArrayRegion(bytes, 0, (jsize)strlen(pat), (jbyte*)pat);//设置String, 保存语言类型,用于byte数组转换至String时的参数 jstring encoding = (env)-NewStringUTF("utf-...
//将char* 转换为byte数组 (env)->SetByteArrayRegion(bytes, 0, (jsize) strlen(pat), (jbyte*) pat); //设置String, 保存语言类型,用于byte数组转换至String时的参数 jstring encoding = (env)->NewStringUTF("GB2312"); //将byte数组转换为java String,并输出 ...
unsigned char* 转jstring /** * unsigned char 转成 jstring 类型 * @param e * @param pJobject * @param pChar * @return */jstringunsigchar2jstring(JNIEnv*e,unsignedchar*pChar){unsignedchar*newresult=pChar;//定义java String类 clsstringjclass clsstring=e->FindClass("java/lang/String");//...
通常在C/C++的char* 类型是当前系统环境的字符编码/字符集,中文简体是GB2312,台湾的是BIG5等等,在java里首先尝试 new String(byte[])这种方式,就是不指定编码格式/字符集的构造函数,java应该也会使用当前系统环境的编码/字符集(好像跟环境参数encoding什么的有关),如果不行的话,就要去确认C/...
下面是我在网上找到的一些把jstring和char*转换的一些sample代码: jstring to char* char* jstringTostring(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsstring = env->FindClass("java/lang/String"); jstring strencode = env->NewStringUTF("utf-8"); ...
1、java --> c/c++ 这种情况中,java调用的时候使用的是UTF-16编码的字符串,jvm把这个字符串传给jni,c/c++得到的输入是jstring,这个时候,可以利用jni提供的两种函数,一个是GetStringUTFChars,这个函数将得到一个UTF-8编码的字符串;另一个是 GetStringChars这个将得到UTF-16编码的字符串。无论...