如何在数组中设置jbyte的值

时间:2017-03-11 06:51:43

标签: android c++ java-native-interface native

我尝试使用jbyte但得到错误:

 Error:(12, 19) error: no viable overloaded '='.

这是我的代码:

jint len = env->GetArrayLength(s);
jbyteArray result = (env)->NewByteArray(len);
jbyte *element = env->GetByteArrayElements(s,false);
for (int i=0; i < len; i++) {
    if(env->ExceptionOccurred()) {
        break;
        }
    result[i] = *(element+i);
    }

出了什么问题?

1 个答案:

答案 0 :(得分:1)

你不能这样写jbyteArray。您需要使用GetByteArrayElements来获取指向底层数组的指针。然后在完成该数组后使用ReleaseByteArrayElements

jbyte *result_bytes = env->GetByteArrayElements(result, NULL);
....
result_bytes[i] = *(element+i);
...
// 0 = copy back the modified data if necessary
env->ReleaseByteArrayElements(result, result_bytes, 0);

请参阅http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html

顺便说一下:GetByteArrayElements的第二个参数是jboolean*,因此GetByteArrayElements(s,false)应为GetByteArrayElements(s, NULL)
你需要调用{{1}当你使用ReleaseByteArrayElements完成时。