使用JNI将C数组复制到Java数组中

Lan*_*opp 4 c arrays java-native-interface set

我在C中有一个无符号整数数组和一个long数组java数组.我想将无符号整数的内容复制到java数组中.到目前为止,我发现的唯一一个函数是SetLongArrayRegion(),但这需要一个完整的缓冲区数组.是否有一个函数只设置java数组的各个元素?

Dav*_*ter 5

原始"long"类型还有一个函数可以在JNI中设置单个元素.所以我相信你想拥有的是这样的

unsigned int* cIntegers = getFromSomewhere();
int elements = sizeof(cIntegers) / sizeof(int);

jfieldID jLongArrayId = env->GetFieldID(javaClass, "longArray", "[J");
jlongArray jLongArray = (jlongArray) env->GetObjectField(javaObject, jLongArrayId);
for (unsigned int i = 0; i < elements; ++i) {
   unsigned int cInteger = cIntegers[i];
   long cLong = doSomehowConvert(cInteger);
   env->SetLongArrayElement(jLongArray, i, (jlong) cLong);
}
Run Code Online (Sandbox Code Playgroud)

如果调用java中的long数组longArray并且java类保存在JNI jclass变量中javaClass.