java jni string_android ndk jni 字符串 String jstring

下面的这个函数是实现了 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;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值