Android NDK将3D浮点数组传递给C代码
Android NDK pass 3D float array to C code
我想从java传递一个3d float数组(float[][][])给c编辑它并将数组返回给java
Curretly我只能用这个的1D阵列来做到这一点
jfloat* valuesjf = NULL;
float* valuesf = NULL;
void Java_Grids_Grid5_Update( JNIEnv* env,jobject thiz,jfloatArray values )
{
valuesjf = (*env)->GetFloatArrayElements(env,values,NULL);
valuesf = valuesjf;
valuesf[0]=121+valuesf[0];//do some calculations
(*env)->ReleaseFloatArrayElements(env, values, valuesjf, JNI_ABORT);
}
如何使用3D阵列?
您可以将Java中的3d浮点数组展平为1d数组。然后,您可以通过在1d数组中生成正确的索引来访问原始3d数组的每个元素。您还需要将数组的每个维度的长度传递给本机方法,以便本机方法也可以为1d数组生成正确的索引
Java:
// The lengths of each dimension of the values array
int l, m, n;
// Instead of:
// float[][][] values = new float[l][m][n];
// Do this:
float[] values = new float[l * m * n];
// To access an entry at (x, y, z) in the array.
// Instead of:
// float v = values[z][y][x];
// Do this:
int i = (m * n * z) + (n * y) + x;
float v = values[i];
C++:
// You should not store a reference to the Java array as a global variable.
// The reference is only valid between the Get/ReleaseFloatArrayElements calls
// Since valuesf is assigned the same reference to the Java array,
// the same advice also applies to it
// jfloat* valuesjf = NULL;
// float* valuesf = NULL;
void
Java_Grids_Grid5_Update(JNIEnv* env,
jobject thiz,
jfloatArray values,
jint l, jint, m, jint n) {
jfloat* valuesjf = (*env)->GetFloatArrayElements(env,values,NULL);
float* valuesf = valuesjf;
int x, y, z;
int i = (m * n * z) + (n * y) + x;
valuesf[0]=121+valuesf[i]; //do some calculations
(*env)->ReleaseFloatArrayElements(env, values, valuesjf, JNI_ABORT);
}
这都在JNI文档中。以下是关于如何在JNI中使用多维数组的说明,并以二维数组为例:http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jnistring.html#multi
相关文章:
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 代码使用向量成功运行,但使用数组显示错误
- C++逗号分隔的输入数组代码过早退出
- 如何修改代码以打印出数组 v2
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 如何在 c# 代码中通过引用调用时从 c++ dll 更新数组值?
- 使用基于数组和范围的 For 循环替换一些基本代码行
- G++ 发出警告,要求删除一个代码的数组,但不删除另一个代码的数组
- 为什么我的代码在尝试复制字符数组时引发 C6386 错误?
- 用于查找数组中最大元素的出现次数的代码,给出分段错误
- 调试代码块中的数组
- "p"数组如何使用 std::normal_distribution 存储以下代码中的值C++?
- 在带有模板的函数中传递未知大小的 std::数组.如何更正此代码?
- 有没有办法在c ++中清除空数组,请检查下面的代码以获取说明
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 我的旋转数组代码给出了大数组大小的错误
- 将字符数组转换为键代码数组 c++