Android jni vector转jintArray

JNI vector转jintArray
记录 c++vector转jni数组
	std::vector<int> labels(str_length);
    kmeans.Kmeans_Cluster(&labels);
    
    if (labels.empty()) return nullptr;

    int size = labels.size();
    jintArray  res = env->NewIntArray(size);

    jint *jnum = new jint[size];
    std::memcpy(jnum,&labels[0],size * sizeof(int));
    env->SetIntArrayRegion(res,0,size,jnum);
JNI vector转byteArray
        std::vector<byte> labels(str_length);
		int size = labels.size();
		jbyteArray jarray = env->NewByteArray(size);
		jbyte *jnum = new jbyte[size];
		std::memcpy(jnum, &labels[0], size);
		env->SetByteArrayRegion(jarray, 0, size, jnum);
假设你有一个 C++ 的 `std::vector` 对象,你可以使用 JNI 将其换为 Java 中的 `ArrayList` 对象。 下面是一个示例代码: ```c++ #include <jni.h> #include <vector> extern "C" JNIEXPORT jobject JNICALL Java_com_example_MyClass_convertVectorToArrayList(JNIEnv *env, jobject obj, jobject vectorObj) { jclass arrayListClass = env->FindClass("java/util/ArrayList"); jmethodID arrayListConstructor = env->GetMethodID(arrayListClass, "<init>", "()V"); jobject arrayListObj = env->NewObject(arrayListClass, arrayListConstructor); jclass vectorClass = env->GetObjectClass(vectorObj); jmethodID vectorSizeMethod = env->GetMethodID(vectorClass, "size", "()I"); jmethodID vectorGetMethod = env->GetMethodID(vectorClass, "get", "(I)Ljava/lang/Object;"); int size = env->CallIntMethod(vectorObj, vectorSizeMethod); for (int i = 0; i < size; i++) { jobject element = env->CallObjectMethod(vectorObj, vectorGetMethod, i); env->CallBooleanMethod(arrayListObj, env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"), element); env->DeleteLocalRef(element); } env->DeleteLocalRef(arrayListClass); env->DeleteLocalRef(vectorClass); return arrayListObj; } ``` 在上面的代码中,我们定义了一个名为 `convertVectorToArrayList` 的 JNI 函数,它接受一个 `std::vector` 对象并返回一个 `ArrayList` 对象。 首先,我们获取 `ArrayList` 类的引用,并使用其无参构造函数创建一个新的 `ArrayList` 对象。 然后,我们获取 `vector` 对象的类引用,并使用 `size` 和 `get` 方法来遍历 `vector` 对象中的元素。对于每个元素,我们将其添加到 `ArrayList` 对象中。 最后,我们释放所有局部引用并返回 `ArrayList` 对象。 在你的 Java 代码中,你可以像这样调用 `convertVectorToArrayList` 函数: ```java MyClass myObj = new MyClass(); ArrayList<Integer> arrayList = myObj.convertVectorToArrayList(myVector); ``` 其中,`myVector` 是你的 `std::vector` 对象。注意,这里我们假设 `myVector` 中的元素类型是 `Integer`。如果你的元素类型不同,你需要相应地更改代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值