JNI unsigned char到byte数组

时间:2011-01-06 00:45:29

标签: java java-native-interface bytearray

我正在使用一个C ++库,它将图像字节数据存储在无符号字符数组中。我的jni函数返回一个jByteArray(然后在java端转换为BufferedImage),但我不确定如何从无符号字符数组填充jByteArray(如果可能的话)。任何人都可以为最后一部分提供基本上这样做的片段:

// size is the size of the unsigned char array
const int size = 100;
unsigned char* buf = new unsigned char[size];
// buf gets passed to another library here to be populated

jbyteArray bArray = env->NewByteArray(size);
// now how do I get the data from buf to bArray?

谢谢, 杰夫

2 个答案:

答案 0 :(得分:2)

这是一个应该指向正确方向的片段。

jboolean isCopy;
void *data = env->GetPrimitiveArrayCritical((jarray)bArray, &isCopy);

memcpy(data, buf, bytecount);

// and don't forget the 'release'

答案 1 :(得分:0)

用户jbyte *而不是unsigned char *

在JNI中,jbyte被定义为签名字符。 JNI为此提供了一些功能:您可以创建一个新的jbyteArray和 在给定jbyte *缓冲区的情况下设置它的指定区域。

请阅读文档。