正确地将硬编码的byte 从JNI返回给Java

我想在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的错误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 ,因为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}; 

希望这可以帮助。