如何在数组中设置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
.
我尝试使用 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
.