Jni学习(六)-------vector和jbyteArray转

本文详细介绍了如何将C++中的std::vector<byte>转换为Java的jbyteArray类型,通过具体代码示例展示了整个转换过程,包括获取vector大小、创建jbyteArray、内存拷贝以及设置jbyteArray区域等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vector转jbyteArray:

        std::vector<byte> ins = ((CIAILogic*)addr)->getReuestMahsIns();
		int size = ins.size();
		jbyteArray jarray = env->NewByteArray(size);
		jbyte *jnum = new jbyte[size];
		std::memcpy(jnum, &ins[0], size);
		env->SetByteArrayRegion(jarray, 0, size, jnum);

 

可以通过以下步骤将 C++ 中的 `vector<string>` 数据传递到 Java 中的 `String[]` 数组中: 1. 编写 JNI 接口方法,接收 `vector<string>` 数据,并将其换为 `jobjectArray` 对象: ```c++ JNIEXPORT jobjectArray JNICALL Java_com_example_MyClass_getStringArray(JNIEnv *env, jobject obj, jobject stringVector) { jclass stringClass = env->FindClass("java/lang/String"); jmethodID stringConstructor = env->GetMethodID(stringClass, "<init>", "([BLjava/lang/String;)V"); std::vector<std::string> strVector; getVectorData(stringVector, strVector); jobjectArray stringArray = env->NewObjectArray(strVector.size(), stringClass, NULL); for (int i = 0; i < strVector.size(); i++) { jbyteArray bytes = env->NewByteArray(strVector[i].size()); env->SetByteArrayRegion(bytes, 0, strVector[i].size(), (jbyte*)strVector[i].data()); jstring encoding = env->NewStringUTF("UTF-8"); jobject stringObj = env->NewObject(stringClass, stringConstructor, bytes, encoding); env->SetObjectArrayElement(stringArray, i, stringObj); env->DeleteLocalRef(stringObj); env->DeleteLocalRef(encoding); env->DeleteLocalRef(bytes); } return stringArray; } ``` 其中,`getVectorData()` 是一个自定义的函数,用于从 `jobject` 对象中获取 `vector<string>` 数据。 2. 在 Java 代码中调用 JNI 接口方法,获取 `String[]` 数组: ```java public class MyClass { static { System.loadLibrary("myLibrary"); } public static native String[] getStringArray(Vector<String> stringVector); public static void main(String[] args) { Vector<String> stringVector = new Vector<>(); stringVector.add("Hello"); stringVector.add("world"); stringVector.add("!"); String[] stringArray = getStringArray(stringVector); for (String str : stringArray) { System.out.println(str); } } } ``` 在 Java 代码中,首先需要加载 C++ 的动态库,然后调用 JNI 接口方法 `getStringArray()`,将 `Vector<String>` 数据传递给 C++,并获取换后的 `String[]` 数组。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值