我在做什么: 我在途中在C中添加了四个整数,我丢失了信息。
见下面的代码:
//c-file
jbyte *inputByteArray = (*env)->GetDirectBufferAddress (env, obj);
// checked every value, also sizeof(val1)= 4 etc...
int val1 = (int) *(inputByteArray + 1); //120
int val2 = (int) *(inputByteArray + 2); //120
int val3 = (int) *(inputByteArray + 3); //180
int val4 = (int) *(inputByteArray + 4); //180
int result = val1 + val2 + val3 + val4;
return result;
//return type is int
//output: 88, should be 600
// 88 binary: 0000 0000 0101 1000
//600 binary: 0000 0010 0101 1000
关于这一点的特殊之处是以下,可能导致问题:
输入的4个值来自Java的移交缓冲区,它是一个直接的ByteBuffer。它直接在Java中分配,以便不被垃圾收集器移动。在c侧,我通过“GetDirectBufferAddress”(参见代码)指针传递缓冲区,单个值与数组中的值匹配。
有人知道这种奇怪的行为吗?
当我使用IntBuffer移交数字时,它会顺便说一下。
我在这里工作的性能,所以我想要小缓冲区,我的数据值足够小,可以使用ByteBuffer。 (这只是c代码侧较大计算的一部分)
由于这是在Android上,我没有设法调试到c代码......
编辑:我在Android 3.2.1测试设备的当前版本中使用eclipse / SDK / NDK