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;
}
|