在使用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 真不是我捧它,技术解决方案,绝对算得上神器中的神器。
而在JNI中String对象是可以直接转为jstring的,故CharSequence转jstring方法如下: jstringconvertCharSequence(JNIEnv*env,jobject thiz,jobject csObj/*CharSequence object*/){jclass csClass=env->GetObjectClass(csObj);jmethodID toString=env->GetMethodID(csClass,"toString","()Ljava/lang/String;");jobject s...
//建立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,并输出 ...
JNI中 jstring与 char* 格式互转 //以下gcc能编译过,且正确,vc++下可能错误 char* jstringtochar( JNIEnv *env, jstring jstr ) { char* rtn = NULL; jclass clsstring = (*env)->FindClass(env,"java/lang/String"); jstring strencode = (*env)->NewStringUTF(env,"utf-8");...
使用wide char类型来转换。char* jstringToWindows( JNIEnv *env, jstring jstr ){ //UTF8/16转换成gb2312 int length = (env)->GetStringLength(jstr );const jchar* jcstr = (env)->GetStringChars(jstr, 0 );char* rtn = (char*)malloc( length*2+1 );int size = 0;size = ...
通常在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"); ...
Jni 返回jstring 将一个GBK编码的字符串返回给Java层 误区 因为这是一个GBK编码的char*字符串,不可能直接调用函数直接返回: char* p; jstring encoding = (env)->NewStringUTF(p); 出现如下的错误:the key point is "Modified UTF-8"is not like "Regular UTF-8", a legal Rgular UTF8 code sequence ma...