android JNI调用 - char*与jstring相互转换
16lz
2021-01-25
在使用jni调用时经常遇到数据类型转换问题,以下是char*与jstring相互转换的代码://java字符串转C字符串char* jstringTostr(JNIEnv* env, jstring jstr){ char* pStr = NULL; jclass jstrObj = (*env)->FindClass(env, "java/lang/String"); jstring encode = (*env)->NewStringUTF(env, "utf-8"); jmethodID methodId = (*env)->GetMethodID(env, jstrObj, "getBytes", "(Ljava/lang/String;)[B"); jbyteArray byteArray = (jbyteArray)(*env)->CallObjectMethod(env, jstr, methodId, encode); jsize strLen = (*env)->GetArrayLength(env, byteArray); jbyte *jBuf = (*env)->GetByteArrayElements(env, byteArray, JNI_FALSE); if (jBuf > 0) { pStr = (char*)malloc(strLen + 1); if (!pStr) { return NULL; } memcpy(pStr, jBuf, strLen); pStr[strLen] = 0; } (*env)->ReleaseByteArrayElements(env, byteArray, jBuf, 0); return pStr;}//C字符串转java字符串jstring strToJstring(JNIEnv* env, const char* pStr){ int strLen = strlen(pStr); jclass jstrObj = (*env)->FindClass(env, "java/lang/String"); jmethodID methodId = (*env)->GetMethodID(env, jstrObj, "<init>", "([BLjava/lang/String;)V"); jbyteArray byteArray = (*env)->NewByteArray(env, strLen); jstring encode = (*env)->NewStringUTF(env, "utf-8"); (*env)->SetByteArrayRegion(env, byteArray, 0, strLen, (jbyte*)pStr); return (jstring)(*env)->NewObject(env, jstrObj, methodId, byteArray, encode);}
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 分支和循环(二)(零基础学习C语言)
- Android第六个功能:XmlPullParser解析XML文件
- Android(安卓)Layout Binder(在线将XML中View find出来,生成java代
- Android(安卓)Toast 总结
- 【Dialer】自定义暗码进入测试模式
- Android应用自动更新功能的实现!!!软件更新,自动下载,安装
- android文件上传示例分享(android图片上传)
- 【原创】android中实现底部tabhost