【问题标题】:JNI unsigned char to byte arrayJNI 无符号字符到字节数组
【发布时间】:2011-01-06 00:45:29
【问题描述】:

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

// 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?

谢谢, 杰夫

【问题讨论】:

    标签: java java-native-interface bytearray


    【解决方案1】:

    这是一个可以为您指明正确方向的 sn-p。

    jboolean isCopy;
    void *data = env->GetPrimitiveArrayCritical((jarray)bArray, &isCopy);
    
    memcpy(data, buf, bytecount);
    
    // and don't forget the 'release'
    

    【讨论】:

    • 我在这里有点困惑。原始 unsigned char 数组(不是 jarray)的复制发生在哪里?
    【解决方案2】:

    使用 jbyte* 而不是 unsigned char*

    在 JNI 中,jbyte 被定义为有符号字符。 JNI 为此提供了一些函数:您可以创建一个新的 jbyteArray 和 给定一个 jbyte* 缓冲区,设置它的指定区域。

    请阅读文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 2016-11-29
      • 2017-12-03
      • 1970-01-01
      • 2018-05-25
      • 2018-04-07
      相关资源
      最近更新 更多