gpt4 book ai didi

java - 将 C++ 原始类型 vector 转换为 Java 原始类型数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:27 26 4
gpt4 key购买 nike

我正在为我的项目使用第三方 C++ API,它具有返回值类型为 std::vector<int> 的函数。 , std::vector<bool> , std::vector<double> .我需要将具有这些类型的变量传递给 Java。所以我正在使用 JNI,我的函数返回类型为 jintArray 的值, jbooleanArray , jdoubleArray .

我正在使用以下代码转换 double输入:

std::vector<double> data;
//fill data
jdouble *outArray = &data[0];
jdoubleArray outJNIArray = (*env).NewDoubleArray(data.size()); // allocate
if (NULL == outJNIArray) return NULL;
(*env).SetDoubleArrayRegion(outJNIArray, 0 , data.size(), outArray); // copy
return outJNIArray;

我对这个代码块没问题。但是当我想为 int 这样做时和 bool types 存在以下问题:

std::vector<int> data;
//fill data
jint *outArray = &data[0];

std::vector<bool> data;
//fill data
jboolean *outArray = &data[0];

问题在于 jint 的定义和 jboolean ,因为:

typedef long            jint;
typedef unsigned char jboolean;

jdouble :

typedef double          jdouble;

因为,您可以看到我对 double 的便捷解决方案不适用于 intbool类型,因为它们的 typedef 不匹配。

所以,我的问题是如何方便地对所有基本类型进行这种转换?

提前致谢

最佳答案

由于数据类型可能具有不同的大小,因此您必须复制 vector 。最简单的方法是

std::vector<jboolean> tmp(data.begin(), data.end());
jboolean *outArray = &tmp[0];

当然,您可以分配 jBooleanArray 并在 for 循环中设置元素,或者为其编写一个类似于 STL 容器的包装器。

关于java - 将 C++ 原始类型 vector 转换为 Java 原始类型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24054781/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com