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

android jni操作数组

2012-12-19 17:07 363 查看
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;
}


移动开发qq群:59516399
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: