这听起来可能很奇怪,但过去 2 天我一直在努力解决这个错误。
我
boolean
在 java 中有一个使用Random
布尔生成器初始化的数组。之后,
boolean
C 中的函数(使用 JNI 调用)对数组进行操作,并将修改后的boolean
数组返回给 java。当我将boolean
数组移交给 C 时,它被转换为 unsigned char 并jbooleanArray
在返回给 java 之前转换回。现在我运行以下代码(i 上有一个 for 循环):
if(chosen_packet[i] == false) { pkt.first[i] = 0; System.out.print(chosen_packet[i]); } if(chosen_packet[i] == true) { pkt.first[i] = 1; System.out.print(chosen_packet[i]); }
问题是,有时什么时候chosen_packet[i]
还是true
没有进入第二个if
条件。有时会发生这种情况,有时代码工作得很好。当我chosen_packet[i]
在这种情况下打印true
它时,它还没有进入第二个if
条件。boolean
阵列的这种看似损坏的可能原因是什么?
编辑:这就是我将boolean
数组转换为unsigned char
C 的方式:
jboolean *element = (*env)->GetBooleanArrayElements(env,chosen_packet,0);
for(j = 0; j < sz; j++)
src_pkt[j] = (unsigned char)element[j];
这个 src_pkt 被执行,然后我将它转换回jboolean
.
EDIT2:这就是我将 unsigned char 数组转换回 jboolean 的方式:
jbooleanArray arr = (*env)->NewBooleanArray(env,sz);
(*env)->SetBooleanArrayRegion(env,arr,0,sz,src_pkts);
(*env)->DeleteLocalRef(env,arr);