您的位置:首页 > 移动开发 > Android开发

android jni操作数组

2013-05-06 10:51 309 查看

java 8种基本类型的数组转换成c语言的数组
jboolean* (*GetBooleanArrayElements)(JNIEnv*, jbooleanArray, jboolean*);

jbyte* (*GetByteArrayElements)(JNIEnv*, jbyteArray, jboolean*);

jchar* (*GetCharArrayElements)(JNIEnv*, jcharArray, jboolean*);

jshort* (*GetShortArrayElements)(JNIEnv*, jshortArray, jboolean*);

jint* (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);

jlong* (*GetLongArrayElements)(JNIEnv*, jlongArray, jboolean*);

jfloat* (*GetFloatArrayElements)(JNIEnv*, jfloatArray, jboolean*);

jdouble* (*GetDoubleArrayElements)(JNIEnv*, jdoubleArray, jboolean*);
获取数组的长度:
jsize (*GetArrayLength)(JNIEnv*, jarray);
释放数组的内存:
void (*ReleaseBooleanArrayElements)(JNIEnv*, jbooleanArray,
jboolean*, jint);
void (*ReleaseByteArrayElements)(JNIEnv*, jbyteArray,

jbyte*, jint);

void (*ReleaseCharArrayElements)(JNIEnv*, jcharArray,

jchar*, jint);

void (*ReleaseShortArrayElements)(JNIEnv*, jshortArray,

jshort*, jint);

void (*ReleaseIntArrayElements)(JNIEnv*, jintArray,

jint*, jint);

void (*ReleaseLongArrayElements)(JNIEnv*, jlongArray,

jlong*, jint);

void (*ReleaseFloatArrayElements)(JNIEnv*, jfloatArray,

jfloat*, jint);

void (*ReleaseDoubleArrayElements)(JNIEnv*, jdoubleArray,

jdouble*, jint);
创建一个数组
jbooleanArray (*NewBooleanArray)(JNIEnv*, jsize);
jbyteArray (*NewByteArray)(JNIEnv*, jsize);

jcharArray (*NewCharArray)(JNIEnv*, jsize);

jshortArray (*NewShortArray)(JNIEnv*, jsize);

jintArray (*NewIntArray)(JNIEnv*, jsize);

jlongArray (*NewLongArray)(JNIEnv*, jsize);

jfloatArray (*NewFloatArray)(JNIEnv*, jsize);

jdoubleArray (*NewDoubleArray)(JNIEnv*, jsize);
给数组赋值
void (*SetBooleanArrayRegion)(JNIEnv*, jbooleanArray,
jsize, jsize, const jboolean*);

void (*SetByteArrayRegion)(JNIEnv*, jbyteArray,

jsize, jsize, const jbyte*);

void (*SetCharArrayRegion)(JNIEnv*, jcharArray,

jsize, jsize, const jchar*);

void (*SetShortArrayRegion)(JNIEnv*, jshortArray,

jsize, jsize, const jshort*);

void (*SetIntArrayRegion)(JNIEnv*, jintArray,

jsize, jsize, const jint*);

void (*SetLongArrayRegion)(JNIEnv*, jlongArray,

jsize, jsize, const jlong*);

void (*SetFloatArrayRegion)(JNIEnv*, jfloatArray,

jsize, jsize, const jfloat*);

void (*SetDoubleArrayRegion)(JNIEnv*, jdoubleArray,

jsize, jsize, const jdouble*);

//传给C语言数组
JNIEXPORT jintArray JNICALL Java_cn_my_ndkpassdata_DataProvider_intMethod
(JNIEnv * env, jobject obj, jintArray arr){
//获取数组的长度
int len=(*env)->GetArrayLength(env,arr);
LOGI("LEN=%d\n",len);
//获取int类型的数组
jint * elems=(*env)->GetIntArrayElements(env,arr,NULL);
jint temp=0;
int i=0;
for(;i<len;i++)
{
elems[i]+=10;

}

//把elems复制给arr,从第0位开始,长度位len
(*env)->SetIntArrayRegion(env,arr,0,len,elems);

(*env)->ReleaseByteArrayElements(env, elems, 0);
return arr;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: