NDK Java C 数据类型转换
来源:互联网 发布:java web源码 编辑:程序博客网 时间:2024/06/04 18:10
</pre>这次主要学习 NDK 类型转换<p></p><p>java数据类型和JNI底层的C类型进行转换,这个也不难</p><p></p><p>打开NDK中的jni.h 最前面 定义了C语言的类型宏</p><p></p><pre class="cpp" name="code">#ifdef HAVE_INTTYPES_H# include <inttypes.h> /* C99 */typedef uint8_t jboolean; /* unsigned 8 bits */typedef int8_t jbyte; /* signed 8 bits */typedef uint16_t jchar; /* unsigned 16 bits */typedef int16_t jshort; /* signed 16 bits */typedef int32_t jint; /* signed 32 bits */typedef int64_t jlong; /* signed 64 bits */typedef float jfloat; /* 32-bit IEEE 754 */typedef double jdouble; /* 64-bit IEEE 754 */#elsetypedef unsigned char jboolean; /* unsigned 8 bits */typedef signed char jbyte; /* signed 8 bits */typedef unsigned short jchar; /* unsigned 16 bits */typedef short jshort; /* signed 16 bits */typedef int jint; /* signed 32 bits */typedef long long jlong; /* signed 64 bits */typedef float jfloat; /* 32-bit IEEE 754 */typedef double jdouble; /* 64-bit IEEE 754 */#endif
意义差不多。
int[] 对应的数组就是jintArray
char[] 对应 jcharArray
Class对应jclass
String 对应jstring
从JNI层返回一个字符串非常简单,第一次学习都会遇到。
(*env)->NewStringUTF(env,"its ok"); //这个方法,直接返回了java string类型。
1. java 字符串转C字符串
c语言里面存储字符串用的是char指针,
也就是jstring 转成 char * 类型
const jchar* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*); 第二个参数是JAVA层的字符串,第三个参数是boolean引用,是否成功
JNIEXPORT jstring JNICALL Java_com_birds_android_ndk_JNI_convert (JNIEnv *env, jobject jb, jstring jstr, jint age, jintArray arr) { jboolean b; const char* mychar = (*env)->GetStringUTFChars(env,jstr,&b); if (0 != mychar ) { //用过后释放,否则可能导致内存泄露 (*env)->ReleaseStringUTFChars(env,jstr,mychar); return (*env)->NewStringUTF(env,"its ok copyed."); }return (*env)->NewStringUTF(env,"its ok.");}
2.java 数组转C 数组
这个也是一样的道理.
jint* (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);
jboolean b1;jint *myarr = (*env)->GetIntArrayElements(env,arr,&b1);if (0 != myarr) {(*env)->ReleaseIntArrayElements(env,arr,myarr,0);//最后一个参数0表示释放myarr内存.1表示不释放内存但复制内容.return (*env)->NewStringUTF(env,"int array copyed.");}上面是指针的做法。
void (*GetIntArrayRegion)(JNIEnv*, jintArray, jsize, jsize, jint*); 这个也可以获取JAVA传入的整形数组,2个整形参数依次是数组起点和offset
其他类型与上面的做法类似.
例如:
jintArray (*NewIntArray)(JNIEnv*, jsize); 这个函数是创建一个指定大小jint数组.
JNI.h 里面包含了大量的基础函数。
- NDK Java C 数据类型转换
- Android NDK的环境配置及详细应用JAVA 及C的互相调用及数据类型转换例子
- Android NDK数据类型转换详解
- Java 与 C 底层数据类型转换
- Java 与 C 底层数据类型转换
- Java与C底层数据类型转换
- Java 与 C 底层数据类型转换
- Java与C底层数据类型转换
- Android NDK开发中java数据类型与C/C++数据类型的对应关系
- Android NDK开发中java数据类型与C/C++数据类型的对应关系
- Android NDK开发中java数据类型与C/C++数据类型的对应关系
- NDK学习笔记:jni数据类型转换
- C中数据类型转换
- objective-C 数据类型转换
- c/c++数据类型转换
- C中数据类型转换
- C#:数据类型转换
- C语言数据类型转换
- FPGA学习资源
- 如何查看IIS并发连接数
- 使用grep 过滤logcat输出
- Oracle 查看 表, 存储过程, 触发器, 函数, 等对象定义语句
- 学习多线程同步之智能指针巧用
- NDK Java C 数据类型转换
- 机器学习_adaboost 算法
- 黑马程序员_源自梦想 Exception--异常
- 一个完整win32汇编窗口程序的分析
- Android 对SD卡下英文单词进行发音
- android中使用startActivityForResult回传数据
- 表达式类型转换问题
- 高效工作的16个好习惯
- latex学习笔记第一篇