gpt4 book ai didi

java - 将 jchararray 分配给 const unsigned char

转载 作者:行者123 更新时间:2023-11-30 14:51:42 24 4
gpt4 key购买 nike

我将 char [] 从 java 传递到 jni :

function(char [] aChar);

然后我在 jni 处读取了 char[] :

JNIEXPORT jbyteArray JNICALL
packagename_function(JNIEnv *env, jobject obj, jcharArray aChar) {

const unsigned char *theValue;
}

现在我想将 aChar 指定为 theValue 的值。

正确的分配方法是什么?

最佳答案

这里有两个选择:

  1. 您可以传递数组(就像您所做的那样),然后您需要检索它的元素:

    http://jnicookbook.owsiak.org/recipe-No-012/

    /* get size of the array */
    jsize len = (*env)->GetArrayLength(env, array);

    /* get the body of array; it will be referecende by C pointer */
    jchar *body = (*env)->GetCharArrayElements(env, array, 0);

    /* do some stuff */
    for(int i=0; i < len; i++) {
    printf("Char value: %c\n", body[i]);
    }

    /* release body when you decide it is no longer needed */
    (*env)->ReleaseCharArrayElements(env, array, body, 0);
  2. 您可以将字符作为 String 对象传递

    http://jnicookbook.owsiak.org/recipe-No-009/

    // we have to get string bytes into C string
    const char *c_str;
    c_str = (*env)->GetStringUTFChars(env, str, NULL);
    if(c_str == NULL) {
    return;
    }

    printf("Passed string: %s\n", c_str);

    // after using it, remember to release the memory
    (*env)->ReleaseStringUTFChars(env, str, c_str);

    如果将 String 从 Java 传递到 C,您必须更改两件事:

    • 您需要将方法签名更改为

      packagename_function(JNIEnv *env, jobject obj, jstring aChar)  
    • 在 Java 代码中,您必须从字符创建字符串

      char data[] = {'a', 'b', 'c'};
      String str = new String(data);

    然后,将其传递给 native 代码。

    注意!小心类型长度!您可以随时在这里查看:

    https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html

关于java - 将 jchararray 分配给 const unsigned char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48087316/

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