在您发布的代码中,您将其称为:
double * rest = (double *)env->GetDirectBufferAddress(bytebuffer + 12);
这会将12加到
bytebuffer
jobject,而不是数字。
GetDirectBufferAddress()返回一个地址;由于前3
int个字节各为4个字节,因此我相信您正确地添加了12个字节,但未
在正确的位置添加它 。
您可能打算这样做:
double * rest = (double *)((char *)env->GetDirectBufferAddress(bytebuffer) + 12);
对于您的总体代码,要获取前三个
ints和其余的
doubles,请尝试类似以下 *** 作:
void * address = env->GetDirectBufferAddress(bytebuffer);int * firstInt = (int *)address;int * secondInt = (int *)address + 1;int * doubleCount = (int *)address + 2;double * rest = (double *)((char *)address + 3 * sizeof(int));// you said the third int represents the number of doubles followingfor (int i = 0; i < doubleCount; i++) { double d = *rest + i; // or rest[i] // do something with the d double}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)