2023-01-19 365
我通过本机方法获得bytebuffer.
bytebuffer以3 int s开头,然后仅包含双打.
第三个int告诉我随后的双打数量.
我能够阅读前三个ints.
当我尝试阅读双打时,为什么代码崩溃?
相关代码获取前三个整数:
JNIEXPORT void JNICALL test(JNIEnv *env, jobject bytebuffer)
{
int * data = (int *)env->GetDirectBufferAddress(bytebuffer);
}
相关代码以获取剩余的双打:
double * rest = (double *)env->GetDirectBufferAddress(bytebuffer + 12);
在您发布的代码中,您正在调用此:
double * rest = (double *)env->GetDirectBufferAddress(bytebuffer + 12);
这将12添加到bytebuffer jobject中,这不是一个数字.
GetDirectBufferAddress()返回地址;由于前3 int每个是4个字节,我相信您正在正确添加12个字节,但是您没有在正确的位置添加它.
.
您可能意味着要做的是:
double * rest = (double *)((char *)env->GetDirectBufferAddress(bytebuffer) + 12);
对于您的整体代码,要获得最初的三个int和剩余的double,请尝试类似的内容:
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 following
for (int i = 0; i < doubleCount; i++) {
double d = *rest + i; // or rest[i]
// do something with the d double
}
以上所述是小编给大家介绍的如何从JNI中调用来自GetDirectBufferAddress的多种数据类型?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25789.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态