在jni android中返回字节数组?

 2023-01-19    411  

问题描述

我需要从JNI到Java获取字节数组.
例如:我有一个字节数组字节[] a = {1,2,3,4,5,6}

JNIEXPORT jbyteArray JNICALL Java_com_vn_getArray (JNIEnv *env, jobject obj) {
  jbyte[] a = {1,2,3,4,5,6};
  return a;

}

在jni android中返回字节数组?

我不知道如何从jni返回字节阵列.

有人可以帮我吗?请!

推荐答案

在Java中,数组是一个对象.因此,要将一个字节阵列从C或C ++交给Java,您将需要实例化JbyTearray,然后返回.而不是C数组.要解决这个问题,请参见以下代码:

JNIEXPORT jbyteArray JNICALL Java_Test_returnArray
  (JNIEnv *env, jobject This)
{
        jbyte a[] = {1,2,3,4,5,6};
        jbyteArray ret = env->NewByteArray(6);
        env->SetByteArrayRegion (ret, 0, 6, a);
        return ret;
}

基于此 link

其他推荐答案

我喜欢那样,它正在工作

JNIEXPORT jbyteArray JNICALL Java_com_vn_getArray(JNIEnv *env, jobject obj) {
    jbyte byteUrl[] = {1,2,3,3,4};
    int sizeByteUrl = 5;

    jbyteArray data = (*env)->NewByteArray(env, sizeByteUrl);
    if (data == NULL) {
        return NULL; //  out of memory error thrown
    }

    // creat bytes from byteUrl
    jbyte *bytes = (*env)->GetByteArrayElements(env, data, 0);
    int i;
    for (i = 0; i < sizeByteUrl; i++) {
        bytes[i] = byteUrl[i];
    }

    // move from the temp structure to the java structure
    (*env)->SetByteArrayRegion(env, data, 0, sizeByteUrl, bytes);

    return data;
}

以上所述是小编给大家介绍的在jni android中返回字节数组?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/25778.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。