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

Android NDK:JNI 数组的输入输出

2018-01-27 17:26 218 查看

假设native方法如下(以float类型为例):

public static native float[] featureExtract(float[] input);


对应的C++代码如下:

extern "C"
JNIEXPORT jfloatArray JNICALL Java_com_elelvoc_app_speechwakeapp_tool_Toolkit_featureExtract
(JNIEnv *env, jclass cla, jfloatArray arr )


接下来把 arr参数转换为jfloat *类型的即可,也能顺便取到arr的长度

代码如下:

jfloat *wav_date;
wav_date = env->GetFloatArrayElements(arr, 0);
const jint length = env->GetArrayLength(arr);


返回的时候也是类似(假设我们返回长度为40的float数组)

float *log_mel = new float[40];
jfloatArray result = env->NewFloatArray(40);
env -> SetFloatArrayRegion(result,0,40,log_mel);


用完之后别忘了释放

env->ReleaseFloatArrayElements(arr , wav_date, 0);


注意:

如果你的数组的类型是int

env->GetFloatArrayElements

要改成

env->GetIntArrayElements

SetFloatArrayRegion

要改成

SetIntArrayRegion

其他基本数据类型类似。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: