下面的这个函数是实现了 jstring 到 char 的转换;
pEnv 为当前的环境变量;
ppChars 为从jstring中获取到的最终的char数组,内存由函数内部开辟;
pLength 为jstring的长度;
jstr 为需要转换的jstring类型;
szCharset 这里传字符集,“前期准备”部分有介绍
注:① Java里面的String并不是按照\0结束,并作为结束符,所以必须返回字符串的长度
② 该测试用例并没有做异常处理,使用者可以自行补充上;
完整代码如下:
int jstring2char(JNIEnv* pEnv, char** ppChars, int* pLength, jstring jstr, char* szCharset)
{ jclass clsString = pEnv->FindClass("java/lang/String"); jstring charset = pEnv->NewStringUTF(szCharset); jmethodID method = pEnv->GetMethodID(clsString, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray byteArray = (jbyteArray) pEnv->CallObjectMethod(jstr, method, charset);
jsize nLength = pEnv->GetArrayLength(byteArray);
jbyte* bytes = pEnv->GetByteArrayElements(byteArray, JNI_FALSE);
*pLength = nLength; *ppChars = (char*) malloc(nLength); memcpy(*ppChars, bytes, nLength);
pEnv->ReleaseByteArrayElements(byteArray, bytes, 0); pEnv->DeleteLocalRef(charset);
return 1;}