JNI unsigned char*转jstring 与 jst
2020-11-12 本文已影响0人
仍旧热忱_3619
- unsigned char* 转jstring
/**
* unsigned char 转成 jstring 类型
* @param e
* @param pJobject
* @param pChar
* @return
*/
jstring unsigchar2jstring(JNIEnv *e, unsigned char* pChar){
unsigned char *newresult = pChar;
//定义java String类 clsstring
jclass clsstring = e->FindClass("java/lang/String");
//获取String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String
jmethodID mid = e->GetMethodID(clsstring , "<init>" , "([BLjava/lang/String;)V");
// 设置String, 保存语言类型,用于byte数组转换至String时的参数
jstring encoding = e->NewStringUTF("GB2312");
//建立byte数组
jbyteArray bytes = e->NewByteArray(strlen((char*)newresult));
//将char* 转换为byte数组
e->SetByteArrayRegion(bytes, 0, strlen((char*)newresult), (jbyte*) newresult);
//将byte数组转换为java String,并输出
return (jstring) e->NewObject(clsstring, mid, bytes, encoding);
}
- jstring转unsigned char*
/**
* jstring转成 unsigned char * 类型
* @param e
* @param pJobject
* @param pJstring
* @return
*/
unsigned char *jstring_2unsigchar(JNIEnv *e, jstring pJstring) {
char* rtn = NULL;
jclass clsstring = e->FindClass("java/lang/String");
jstring strencode = e->NewStringUTF("GB2312");
jmethodID mid = e->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray barr = (jbyteArray) e->CallObjectMethod(pJstring, mid, strencode);
jsize alen = e->GetArrayLength(barr);
jbyte* ba = e->GetByteArrayElements(barr, JNI_FALSE);
if (alen > 0) {
rtn = (char*) malloc(alen + 1);
memcpy(rtn, ba, alen);
rtn[alen] = 0;
}
e->ReleaseByteArrayElements(barr, ba, 0);
return reinterpret_cast<unsigned char *>(rtn);
}