jstring
str2jstring(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);
}
std::string
jstring2str(JNIEnv* env, jstring jstr)
{
char *
rtn = NULL;
jclass
clsstring = env->FindClass( "java/lang/String" );
jstring
strencode = env->NewStringUTF( "GB2312" );
jmethodID
mid = env->GetMethodID(clsstring, "getBytes" ,
"(Ljava/lang/String;)[B" );
jbyteArray
barr= (jbyteArray)env->CallObjectMethod(jstr,mid,strencode);
jsize
alen = env->GetArrayLength(barr);
jbyte*
ba = env->GetByteArrayElements(barr,JNI_FALSE);
if (alen
> 0 )
{
rtn
= ( char *)malloc(alen+ 1 );
memcpy(rtn,ba,alen);
rtn[alen]= 0 ;
}
env->ReleaseByteArrayElements(barr,ba, 0 );
std::string
stemp(rtn);
free(rtn);
return stemp;
}
|