如何在jni字段中设置Java floatArray
在Java领域如何在jni字段中设置Java floatArray,java,android,java-native-interface,Java,Android,Java Native Interface,在Java领域 public class JNI{ static{ System.loadLibrary("jni");} public float dataArray[] = new float[5]; public float data; } Java_example_JNI_setData(JNEEnv *env, jobject instance){ jclass jclass1 = (*env).GetObjectClass(instance);
public class JNI{
static{ System.loadLibrary("jni");}
public float dataArray[] = new float[5];
public float data;
}
<JNI C++域< /P>
Java_example_JNI_setData(JNEEnv *env, jobject instance){
jclass jclass1 = (*env).GetObjectClass(instance);
jfieldID jfieldID1 = (*env).GetFieldID(jclass1, "data", "F");
jfloat var1 = 1.0f;
(*env).setFloatField(instance, jfieldID1, var1);
float var[5] = {1.f, 2.f, 3.f, 4.f, 5.f};
}
//如何将dataArray设置为var?
//或者如何使用“SetFloatArrayRegion”不返回值。
float
是java基本类型,其依赖于机器的本机类型是jfloat
所以您需要将float
映射为java类中的jfloat
,该类实现了本机方法
您可以使用以下方法:
JNIEXPORT void JNICALL Java_recipeNo013_PassArrayBack_passFloatArray
(JNIEnv *env, jclass obj, jfloatArray array) {
/* get size of the array */
jsize len = (*env)->GetArrayLength(env, array);
/* get the body of array; it will be referecende by C pointer */
jfloat *body = (*env)->GetFloatArrayElements(env, array, 0);
/* do some stuff */
for(int i=0; i < len; i++) {
printf("Float value: %f\n", body[i]);
/* update value */
body[i] = 0;
}
/* release body when you decide it is no longer needed
Do not pass changes back to Java */
(*env)->ReleaseFloatArrayElements(env, array, body, JNI_ABORT);
}
JNIEXPORT void JNICALL Java\u recipeNo013\u PassArrayBack\u passFloatArray
(JNIEnv*env、jclass obj、jfloatArray数组){
/*获取数组的大小*/
jsize len=(*env)->GetArrayLength(env,数组);
/*获取数组体;它将被C指针引用*/
jfloat*body=(*env)->GetFloatArrayElements(env,数组,0);
/*做点什么*/
对于(int i=0;iReleaseFloatArrayElements(环境、数组、主体、JNI_中止);
}
更多信息可在此处找到:
关于访问从Java传递到C的对象字段,您可以在此处找到一些信息: