Java 使用JNI将float*转换为jfloatArray

Java 使用JNI将float*转换为jfloatArray,java,android,c++,java-native-interface,Java,Android,C++,Java Native Interface,我在C++函数中得到一个浮点*,我需要用jFrAtAtRable转换它,以返回到我的java代码。 如何将float*转换为jfloatArray 感谢要将float*转换为jfloatArray,您可以使用NewFloatArray 您可以使用以下代码: 变量“data”只是一个简单的例子,所以您可以使用您的代码 另外,将com_-your_-packagename修改为真实的packagename 您必须将包裹名称的圆点改为underbar。(com.your.packagename-->

我在C++函数中得到一个浮点*,我需要用jFrAtAtRable转换它,以返回到我的java代码。 如何将float*转换为jfloatArray


感谢

要将float*转换为jfloatArray,您可以使用NewFloatArray

您可以使用以下代码:

  • 变量“data”只是一个简单的例子,所以您可以使用您的代码
  • 另外,将com_-your_-packagename修改为真实的packagename
  • 您必须将包裹名称的圆点改为underbar。(com.your.packagename-->com\u your\u packagename)


要将float*转换为jfloatArray,可以使用NewFloatArray

您可以使用以下代码:

  • 变量“data”只是一个简单的例子,所以您可以使用您的代码
  • 另外,将com_-your_-packagename修改为真实的packagename
  • 您必须将包裹名称的圆点改为underbar。(com.your.packagename-->com\u your\u packagename)


可能重复的可能重复的为什么要对
数据使用指针和
malloc
?为什么不干脆
浮动数据[3]?@PaulMcKenzie这意味着动态分配。若在编译时无法获得数组的大小,那个么可以在运行时定义指针并分配内存。但是在这段代码中,它与浮点数据[3]相同。如果您在运行时不知道数组的大小,那么更好的解决方案是使用
std::vector
。它不仅会自动删除自身,而且如果在malloc()调用和free()之间添加可能引发异常的额外代码,就不会发生内存泄漏<代码>标准::矢量数据(3)。。。env->SetFloatArrayRegion(结果、0、3和数据[0])此外,在我看来,编写JNI代码是尽可能多地使用RAII的一个重要原因。@PaulMcKenzie绝对正确。我也喜欢性病媒。在这段代码中,我只想编写简单的代码。如果有机会使用vector、RAII或Smart pointer,我会选择它。为什么要使用指针和
malloc
来处理
数据?为什么不干脆
浮动数据[3]?@PaulMcKenzie这意味着动态分配。若在编译时无法获得数组的大小,那个么可以在运行时定义指针并分配内存。但是在这段代码中,它与浮点数据[3]相同。如果您在运行时不知道数组的大小,那么更好的解决方案是使用
std::vector
。它不仅会自动删除自身,而且如果在malloc()调用和free()之间添加可能引发异常的额外代码,就不会发生内存泄漏<代码>标准::矢量数据(3)。。。env->SetFloatArrayRegion(结果、0、3和数据[0])此外,在我看来,编写JNI代码是尽可能多地使用RAII的一个重要原因。@PaulMcKenzie绝对正确。我也喜欢性病媒。在这段代码中,我只想编写简单的代码。如果有机会使用vector、RAII或智能指针,我会选择它。
jfloatArray Java_com_your_packagename_farrayFromJNI(JNIEnv *env, jobject thiz) {
    jfloatArray result;
    result = (*env)->NewFloatArray(env, 3);

    float* data;
    data = malloc(sizeof(float) * 3);
    data[0] = 123;  data[1] = 456;  data[2] = 789;

    (*env)->SetFloatArrayRegion(env, result, 0, 3, data);
    free(data);

    return result;
}
extern "C"
{
JNIEXPORT jfloatArray JNICALL Java_com_your_packagename_farrayFromJNI(JNIEnv *env, jobject thiz) {

jfloatArray result;
    result = env->NewFloatArray(3);

    float* data;
    data = malloc(sizeof(float) * 3);
    data[0] = 123;  data[1] = 456;  data[2] = 789;

    env->SetFloatArrayRegion(result, 0, 3, data);
    free(data);
    return result;
};
}