开发者

Copying C Array into Java Array Using JNI

I have an array of uns开发者_如何学Pythonigned integers in C and a java array of longs. I want to copy the contents of the unsigned integers to the java array. So far, the only function that I've found to do this is SetLongArrayRegion(), but this takes an entire buffer array. Is there a function to set only the individual elements of the java array?


There is also a function for the primitive 'long' type to set individual elements in JNI. So I believe what you want to have is something like this

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);
}

if the long array in java is called longArray and the java class is saved in a JNI jclass variable javaClass.


There is a SetObjectArrayElement() function, that works on non-native types. If you really, really wanted to use this approach, I think you could create an array of Longs. You may still have problems with type conversion though.

I think your big problem here is that you are trying to cast unsigned integers to Java longs. Java longs are signed 64 bit numbers. Once you have your conversion right, you can create an array of type jlong in c, and then use to SetLongArrayRegion() method to get the numbers back to java.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜