gpt4 book ai didi

java - 在 JNI 中使用 GetIntArrayElements 打印数组元素

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:43 25 4
gpt4 key购买 nike

我想使用 GetIntArrayElements 来打印 jint 数组的内容。
我的代码如下。

JNI 代码(C):

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, "JNI", __VA_ARGS__)

int size = 5;
jint test_arr[size] = {1, 2, 3, 4, 5}; /* Array to be printed */

jintArray result_arr = (*env)->NewIntArray(env, size);
(*env)->SetIntArrayRegion(env, result_arr, 0, size, test_arr);

/* Print the Value of the Array */
jint *ptr = (*env)->GetIntArrayElements(env, result_arr, NULL);

for (i = 0; i < size; i++)
LOGI("[%d]", *(ptr + i));

(*env)->ReleaseIntArrayElements(env, result_arr, ptr, NULL);

输出:

I/[JNI] ( 1835): [0]
I/[JNI] ( 1835): [1092010456]
I/[JNI] ( 1835): [1092201680]
I/[JNI] ( 1835): [1526497088]
I/[JNI] ( 1835): [0]

预期输出:

I/[JNI] ( 1835): [1]
I/[JNI] ( 1835): [2]
I/[JNI] ( 1835): [3]
I/[JNI] ( 1835): [4]
I/[JNI] ( 1835): [5]

我的最终目标是 this
我相信数组没有从 JNI 正确传递给 Java。

这是打印数组元素的正确方法吗?
我是 JNI 的新手。需要一些帮助。

最佳答案

您的 JNI 没问题,只是弄乱了访问数组的方式。您不能假设 jint 将是 1 个字节,实际上它可能是一个 4 个字节的 long int ...使用 sizeof 运算符让编译器根据您的目标系统决定它应该是什么;)

更改 LOGI("[%d]", *(ptr + i));LOGI("[%ld]", *(ptr + (sizeof(jint) * i)));

更新:我之前没发现这个,但看起来你在 (*env)->SetIntArrayRegion(env, result_arr, 0, size, test_arr); 中颠倒了 result_arr 和 test_arr; 你想要从 test_arr 读取并写入 result_arr (*env)->SetIntArrayRegion(env, test_arr, 0, size, result_arr);

关于java - 在 JNI 中使用 GetIntArrayElements 打印数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25029464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com