在使用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); }
相关推荐
C++调用java java调用C++ 字符串参数传递 类型的转换
Android虚拟机允许你的应用程序源代码通过JNI调用实现本地代码的方法,需要在应用程序中使用关键字native声明一个或多个方法表明该方法是通过本地调用实现的
android jni helloworld DEMO
Android使用JNI调用Python so解释器
主要介绍了Android jni调试打印char阵列的实例详解的相关资料,通过此文希望能帮助到大家实现这样的功能,需要的朋友可以参考下
教你如何生成.h文件,使用window通过NDK编译出.so文件,如何通过JNI调用so文件
android JNI C 调用Java
android jni使用java、c c++相互调用
这是Android的NDK开发之Android JNI调用流程程一个demo。下载下来可以直接在android studio上运行。
libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-windows-x86_64-1.6.0 libtensorflow_jni-cpu-...
这是我写的android jni jstring的demo,共享一下
赠送jar包:zstd-jni-1.4.3-1.jar; 赠送原API文档:zstd-jni-1.4.3-1-javadoc.jar; 赠送源代码:zstd-jni-1.4.3-1-sources.jar; 赠送Maven依赖信息文件:zstd-jni-1.4.3-1.pom; 包含翻译后的API文档:zstd-jni-...
最近项目中需要使用JNI,所以研究了一下,其中遇到过不少问题,总结一下,让遇到同样问题的人可以得到解决。 在C/C++中调用Java的方法一般分为五个步骤:初始化虚拟机、获取类、获取类的方法、创建类对象、调用方法...
android配置ndk,使用swig编译生成jni Java接口调用c++方法。这是成功的例子,前提是你要配置一下你的环境变量。如有疑问,可以去查看我的博客。有相关内容。
Android中调用JNI例子.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android-USB-OTG外部设备通讯USB插拔检测.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
他所使用的是 项目, 我后来发现 Android 系统源码内部包含有修改过的 opencore-amr, 只不过一般的 App 是无法调用的, 我从 Android 系统源码中将该部分提取出来编成 JNI 动态库, 普通 App 可以直接使用, 同时还...
Android开发书籍 - JNI详解_导航版
Android 通过JNI调用驱动代码实例
Android Studio3.0开发JNI流程,C++调用Java以及Java调用C++,C++/Java互相调用一个简单案例