我尝试使用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);
}
出了什么问题?
答案 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
完成时。