如何在 NDK 中计算 C 中的输入 int 数组
How to calculate a input int array in C in NDK
我正在通过 NDK 研究 Android 应用程序中的 C 用法。在我的第一次尝试中,我想传递一个 java int 数组作为 C 函数中的参数。项目编译,我没有任何编译问题。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Sample s=new Sample();
int[] b={1, 2, 3};
int a=s.sum(b);
Log.i("aa","sum= "+a);
}
public class Sample {
static {
System.loadLibrary("sample");
Log.i("a", "Load sample");
}
public native int somma(int[] b);
}
#include <jni.h>
#include "sample.h" // Generated
JNIEXPORT jint JNICALL
Java_com_example_myapplication_Sample_somma(JNIEnv *env, jobject instance, jintArray b_) {
jint *b = (*env)->GetIntArrayElements(env, b_, NULL);
size_t n = sizeof(b_) / sizeof(jint);
jint result=0;
for (int i=0;i<n;i++) {
result+=(*b);
b++;
}
(*env)->ReleaseIntArrayElements(env, b_, b, 0);
return result;
}
问题出在 size_t n = sizeof(b_) / sizeof(jint);
指令上。如何确定数组 b_ 的元素个数?
提前致谢。
您可以通过 GetArrayLength
获得数组的长度:
jsize arrayLength = (*env)->GetArrayLength(env, b_);
我正在通过 NDK 研究 Android 应用程序中的 C 用法。在我的第一次尝试中,我想传递一个 java int 数组作为 C 函数中的参数。项目编译,我没有任何编译问题。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Sample s=new Sample();
int[] b={1, 2, 3};
int a=s.sum(b);
Log.i("aa","sum= "+a);
}
public class Sample {
static {
System.loadLibrary("sample");
Log.i("a", "Load sample");
}
public native int somma(int[] b);
}
#include <jni.h>
#include "sample.h" // Generated
JNIEXPORT jint JNICALL
Java_com_example_myapplication_Sample_somma(JNIEnv *env, jobject instance, jintArray b_) {
jint *b = (*env)->GetIntArrayElements(env, b_, NULL);
size_t n = sizeof(b_) / sizeof(jint);
jint result=0;
for (int i=0;i<n;i++) {
result+=(*b);
b++;
}
(*env)->ReleaseIntArrayElements(env, b_, b, 0);
return result;
}
问题出在 size_t n = sizeof(b_) / sizeof(jint);
指令上。如何确定数组 b_ 的元素个数?
提前致谢。
您可以通过 GetArrayLength
获得数组的长度:
jsize arrayLength = (*env)->GetArrayLength(env, b_);