我在本机库中定义了以下函数
JNIEXPORT jshortArray JNICALL
Java_net_example_android_library_audio_AudioFilter_process(
JNIEnv *env, jobject instance, jshortArray readBuffer_) {
如您所见,我正在通过jshortarray
我有一些接受short*
作为参数的原生函数。
所以我想知道,如何将jshortarray
转换为原生的int input_size = env->GetArrayLength(readBuffer_);
short input[input_size];
jshort *inputArray = env->GetShortArrayElements(readBuffer_, 0);
for (int i = 0; i < input_size; i++) {
input[i] = inputArray[i];
}
。
有没有正确的方法呢?
或者我应该做那样的事情
{{1}}
谢谢
答案 0 :(得分:0)
看看这里:
http://jnicookbook.owsiak.org/recipe-No-012/
您可以在代码中找到jshort*
作为short*
的示例。您可以这样做,因为typdef
中的jni.h
语句:
typedef unsigned char jboolean;
typedef unsigned short jchar;
typedef short jshort;
typedef float jfloat;
typedef double jdouble;
这样,您只需使用jshort
作为short
JNIEXPORT void JNICALL Java_recipeNo012_PassArray_passShortArray
(JNIEnv *env, jclass obj, jshortArray array) {
/* get size of the array */
jsize len = (*env)->GetArrayLength(env, array);
/* get the body of array; it will be referecende by C pointer */
jshort *body = (*env)->GetShortArrayElements(env, array, 0);
/* do some stuff */
for(int i=0; i < len; i++) {
printf("Short value: %hd\n", body[i]);
}
/* release body when you decide it is no longer needed */
(*env)->ReleaseShortArrayElements(env, array, body, 0);
}
您可以随时仔细检查如何定义类型:JDK目录中的jni.h
和$PLATFORM/jni_md.h
。
保持这个方便也很好:
https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html
一句话!请注意,数组&gt; = 2D的管理方式完全不同。