当前位置: 首页 > 面试题库 >

正确地从JNI返回硬编码的byte []到Java

华乐逸
2023-03-14
问题内容

我想在JNI中对16字节数组进行硬编码,并使用方法将其返回

这不行

static jbyteArray JNICALL getKeyBytes(JNIEnv *env, jobject thiz) 
{
    F_LOG;
    Mutex::Autolock _m(sLock);


    jbyteArray result;  
    jbyte* resultType = new jbyte[16];  
    result = (*env)->NewByteArray(env, 16);  //line 214
    resultType = {52, 14, 25, 32, 75, 83, 35, 89, 40, 69, 35, 73, 84, 82, 35, 30};
    (*env)->SetByteArrayRegion(env, result, 0, 16, resultType);
    delete [] resultType;

    return result;
}

我收到以下错误

NativeCodeCaller.cpp:214:17:错误:’->’的基本操作数具有非指针类型’_JNIEnv’

NativeCodeCaller.cpp:215:78:警告:扩展的初始化程序列表仅在-std = c 0x或-std = gnu
0x时可用

NativeCodeCaller.cpp:215:78:错误:无法在分配中将“括号包围的初始化程序列表>”转换为“ jbyte *”

NativeCodeCaller.cpp:216:8:错误:“->”的基本操作数具有非指针类型“ _JNIEnv”

任何快速帮助?:)


问题答案:

该错误base operand of '->' has non-pointer type表明您应该使用.而不是->

因此,无论您使用(*env).NewByteArray(env, 16);还是env->NewByteArray(env, 16);。这与第216行相同。

您还会在下一行(215)处看到另一个错误cannot convert "brace-enclosed initializer list>" to 'jbyte*' in assignment,因为赋值的括号语法仅在声明数组/指针的地方有效(我认为它也取决于编译器,但我不确定)。

您应该尝试:

jbyte resultType[16] = {52, 14, 25, 32, 75, 83, 35, 89, 40, 69, 35, 73, 84, 82, 35, 30};

希望这可以帮助。



 类似资料:
  • 情况: > 在按钮上的第一个片段,我想打开带有部分的第二个片段 在第二个片段上,我可以创建新部分(或使用已存在的),然后在列表项上单击打开第三个片段 在第三个片段上,我可以编写新服务(或使用已存在的服务),然后单击按钮返回第一个片段 并显示部分(来自第二个片段)和服务(来自第三个片段) 我的想法是使用片段。在第二个片段上设置参数(bundle),并将其传输到第三个片段 我应该如何正确地将变量从Al

  • 问题内容: 我正在尝试使用android NDK。 有没有办法将在JNI中创建的数组(以我的情况为例)返回给Java?如果是这样,请提供一个可以执行此操作的JNI函数的简单示例。 问题答案: 如果你已经阅读了文档,但仍然有一些问题应作为最初问题的一部分。在这种情况下,示例中的JNI函数将创建多个数组。外部数组由使用JNI函数创建的“对象”数组组成。从JNI的角度来看,这就是一个二维数组,即一个包含

  • 问题内容: 我正在使用接受json响应的jquery ajax调用: 在我的php后端函数中,我在一个简单的数组上使用json_encode,如下所示: 但是 alert(msg.hello) 为我返回 未定义 。这是怎么了?另外,在我的 console.log中, 我能够得到如下输出: 问题答案: 使用的返回数据:

  • 我有一个本机方法,它返回目录中的文件数组。公共静态本机字符[][]扫描(字符串路径);我不能返回字符串数组,因为如果文件的编码无效-一切都崩溃了,问题是在java端正确地将char[]转换为字符串,当我尝试新字符串(chars)时;我得到无法打印的字符串(无效)。请纠正我。 这是输出的示例(如果方法返回String[])

  • 因此,作为家庭作业,我的任务是编写包含5种静态方法的代码。其中两人要求提供以下内容: “编写一个以整数X为参数的方法,如果X为偶数,则返回true;如果X为奇数,则返回false。” 和 “编写一个以正整数N为参数的方法,如果N是素数,则返回true,否则返回false。假设N 我不清楚我是否需要打印出正确或错误的方法。在我将println添加到方法调用之前,它们显然没有打印。所以我想我有两个问题

  • 问题内容: 在Java中,我有: 我希望本机方法“ nativeGetStatus”返回此枚举值。 JNI返回整数并与java中的enum的值进行比较是一个选项,但是想知道是否可以通过jobject返回值并将其直接分配给state吗?如果是,怎么办? 问题答案: 当然可以。枚举值是Enum类的公共静态字段,因此您可以使用此官方手册编写代码。只需从JNI获取字段并将其作为jobject返回即可。