JNI 返回二维、三维,char、float、int、long型数组到java层
2018-01-18 17:37
495 查看
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> #include <string.h> #include <android/log.h> #include "local_client_select.h" #include "array_buffer.h" #include "Interface_Module.h" #include "airmovegesture_com_socketjnitest_MultiTypeArraryTest.h" /* Header for class airmovegesture_com_socketjnitest_MultiTypeArraryTest */ #define LOG_TAG "GetAirMoveGestureInfoJni" #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) #define WIDTH_BLOCK_NUM 40 #define HEIGHT_BLOCK_NUM 40 #ifdef __cplusplus extern "C" { #endif /* * Class: airmovegesture_com_socketjnitest_MultiTypeArraryTest * Method: TestChar2D * Signature: ()[[C */ interface_module_motion_data_t *m_stIMMotion=NULL; JNIEXPORT jobjectArray JNICALL Java_airmovegesture_com_socketjnitest_MultiTypeArraryTest_TestChar2D (JNIEnv *env, jclass jcl){ int count=WIDTH_BLOCK_NUM*HEIGHT_BLOCK_NUM; m_stIMMotion=new interface_module_motion_data_t; memset(m_stIMMotion,0, sizeof(interface_module_motion_data_t)); m_stIMMotion =interface_module_read_motion_data(); for(int i = 0; i < WIDTH_BLOCK_NUM; i++) { for(int j = 0; j < HEIGHT_BLOCK_NUM; j++) { LOGE("%d ", m_stIMMotion->motion_data.motion_data[i*WIDTH_BLOCK_NUM + j]); } } //一维数组 jclass intArrCls = env->FindClass("[C"); //创建一个有10个元素,每个元素的值是 一维数组的数组 jobjectArray second = env->NewObjectArray(10, intArrCls, NULL); //给以维数据填充值 for (int i = 0; i < 10; i++) { jchar tmp[count]; /* make sure it is large enough! */ jcharArray iarr = env->NewCharArray(count); // tmp[0] = m_stIMMotion->motion_data.motion_data[0]; // tmp[1] = m_stIMMotion->motion_data.motion_data[0]; // tmp[2] = m_stIMMotion->motion_data.motion_data[0]; for(int i = 0; i < WIDTH_BLOCK_NUM; i++) { for(int j = 0; j < HEIGHT_BLOCK_NUM; j++) { //LOGE("%d ", m_stIMMotion->motion_data.motion_data[i*WIDTH_BLOCK_NUM + j]); tmp[i*WIDTH_BLOCK_NUM + j]=m_stIMMotion->motion_data.motion_data[i*WIDTH_BLOCK_NUM + j]; } } //把temp里的0-3的数据值设置给iarr里 env->SetCharArrayRegion(iarr, 0, count, tmp); //给一维数组的第i个元素设置值 env->SetObjectArrayElement(second, i, iarr); //删除临时元素iarr数组 env->DeleteLocalRef(iarr); } return second; } /* * Class: airmovegesture_com_socketjnitest_MultiTypeArraryTest * Method: TestFloat2D * Signature: ()[[F */ JNIEXPORT jobjectArray JNICALL Java_airmovegesture_com_socketjnitest_MultiTypeArraryTest_TestFloat2D (JNIEnv *env, jclass jcl){ //一维数组 jclass intArrCls = env->FindClass("[F"); //创建一个有10个元素,每个元素的值是 一维数组的数组 jobjectArray second = env->NewObjectArray(10, intArrCls, NULL); //给以维数据填充值 for (int i = 0; i < 10; i++) { jfloat tmp[256]; /* make sure it is large enough! */ jfloatArray iarr = env->NewFloatArray(3); tmp[0] = 1.0f; tmp[1] = 2.0f; tmp[2] = 3.0f; //把temp里的0-3的数据值设置给iarr里 env->SetFloatArrayRegion(iarr, 0, 3, tmp); //给一维数组的第i个元素设置值 env->SetObjectArrayElement(second, i, iarr); //删除临时元素iarr数组 env->DeleteLocalRef(iarr); } return second; } /* * Class: airmovegesture_com_socketjnitest_MultiTypeArraryTest * Method: TestLongInt2D * Signature: ()[[J */ JNIEXPORT jobjectArray JNICALL Java_airmovegesture_com_socketjnitest_MultiTypeArraryTest_TestLongInt2D (JNIEnv *env, jclass jcl){ //一维数组 jclass intArrCls = env->FindClass("[J"); //创建一个有10个元素,每个元素的值是 一维数组的数组 jobjectArray second = env->NewObjectArray(10, intArrCls, NULL); //给以维数据填充值 for (int i = 0; i < 10; i++) { jlong tmp[256]; /* make sure it is large enough! */ jlongArray iarr = env->NewLongArray(3); tmp[0] = 1000000000000000000; tmp[1] = 1000000000000000001; tmp[2] = 1000000000000000002; //把temp里的0-3的数据值设置给iarr里 env->SetLongArrayRegion(iarr, 0, 3, tmp); //给一维数组的第i个元素设置值 env->SetObjectArrayElement(second, i, iarr); //删除临时元素iarr数组 env->DeleteLocalRef(iarr); } return second; } #ifdef __cplusplus } #endif //、、、、、、、、、、、、、、三维数组、、、、、、、、、、、、、、、、、、、、、、、、、、、、、/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> #include "airmovegesture_com_socketjnitest_Arrary2D3DTest.h" #include "airmovegesture_com_socketjnitest_GetNativeCApi.h" /* Header for class airmovegesture_com_socketjnitest_Arrary2D3DTest */ #ifdef __cplusplus extern "C" { #endif /* * Class: airmovegesture_com_socketjnitest_Arrary2D3DTest * Method: Arrary2D * Signature: ()[[I */ JNIEXPORT jobjectArray JNICALL Java_airmovegesture_com_socketjnitest_Arrary2D3DTest_Arrary2D (JNIEnv *env, jclass jcl){ //一维数组 jclass intArrCls = env->FindClass("[I"); //创建一个有10个元素,每个元素的值是 一维数组的数组 jobjectArray second = env->NewObjectArray(10, intArrCls, NULL); //给以维数据填充值 for (int i = 0; i < 10; i++) { jint tmp[256]; /* make sure it is large enough! */ jintArray iarr = env->NewIntArray(3); tmp[0] = bs.hand_count; tmp[1] = bs.hand_info.hand_rect.x; tmp[2] = bs.hand_info.hand_rect.y; //把temp里的0-3的数据值设置给iarr里 env->SetIntArrayRegion(iarr, 0, 3, tmp); //给一维数组的第i个元素设置值 env->SetObjectArrayElement(second, i, iarr); //删除临时元素iarr数组 env->DeleteLocalRef(iarr); } return second; } /* * Class: airmovegesture_com_socketjnitest_Arrary2D3DTest * Method: Arrary3D * Signature: ()[[[I */ JNIEXPORT jobjectArray JNICALL Java_airmovegesture_com_socketjnitest_Arrary2D3DTest_Arrary3D (JNIEnv *env, jclass jcl){ jclass intArrCls2 = env->FindClass("[[I"); jobjectArray one = env->NewObjectArray(2, intArrCls2, NULL); for(int k=0;k<2;k++) { //一维数组 jclass intArrCls = env->FindClass("[I"); //创建一个有10个元素,每个元素的值是 一维数组的数组 jobjectArray second = env->NewObjectArray(10, intArrCls, NULL); //给以维数据填充值 for (int i = 0; i < 10; i++) { jint tmp[256]; /* make sure it is large enough! */ jintArray iarr = env->NewIntArray(3); tmp[0] = bs.hand_count; tmp[1] = bs.hand_info.hand_rect.x; tmp[2] = bs.hand_info.hand_rect.y; //把temp里的0-3的数据值设置给iarr里 env->SetIntArrayRegion(iarr, 0, 3, tmp); //给一维数组的第i个元素设置值 env->SetObjectArrayElement(second, i, iarr); //删除临时元素iarr数组 env->DeleteLocalRef(iarr); } //给三维数组里的每个元素设置值,值是一个有一个元素组成的二维数据,每个元素是一个由三个浮点小数组成的三维数组 env->SetObjectArrayElement(one, k, second); //删除临时元素二维数组 env->DeleteLocalRef(second); } return one; } #ifdef __cplusplus } #endif
相关文章推荐
- 通过JNI实现C语言设置Java二维字符串数组并返回该字符串数组
- java中byte数组与int,long,short,float,char之间的转换
- JNI开发之创建int数组返回
- jni java与c++交互返回三维数组jobjectArray
- Java中byte数组与short,int,char,long,float,double之间的转换
- Java中byte数组与short,int,char,long,float,double之间的转换
- java中byte数组与int,long,short,float,char之间的转换
- 不使用库函数,编写函数int strcmp(char *source, char *dest) 相等返回0,不等返回-1【转】
- 二维字符数组与char** 关系
- 【转】java 彻底理解 byte char short int float long double
- float类型在内存中占4个字节,怎样把4个字节值转化成char[4]数组
- 返回一个二维整数数组中最大联通子数组的和
- 有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL。现在要求写一个函数int get(),这个函数运行一次可以从V[N]里随机
- qt中将int、long型转换成char、string
- 声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是()
- 改写函数实现PHP二维/三维数组转字符串
- QString 转 double、 float、 int、 char*
- 返回一个二维整数数组中最大子数组的和
- cout<<char数组名/数组指针"跟"cout<<int数组名/数组指针"的差别
- android中使用jni 在c++层返回一个数组到java