如何在数组中设置jbyte的值

How to set value of jbyte in array

我尝试使用 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);
    }

怎么了?

你不能这样写 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)
你需要调用ReleaseByteArrayElements 当您使用完 element.