2014-04-14 53 views
2

我在.cpp文件中有一个C++函数;说unsigned char *myFunc()。 如何在Java中的byte[]数组中转换该数组? 我的意思是,在Java中,我想要做的事,如:Swig:将无符号字符数组从C++传递到Java

byte[] b = myLib.myFunc();

我使用痛饮和appearently我需要从unsigned char.i文件中定义了一种转化为byte,但我不”不知道如何。

预先感谢您

回答

1

尝试返回std::string而不是在您的.i文件中的unsigned char*%include <std_string.i>。感谢std_string.i typemaps,您可能会在接收端收到byte[]。如果你可以改变的myFunc返回类型,然后通过%inline创建一个包装,像

%inline %{ 
    std::string myFuncStr() { return myFunc(); } 
%} 

如果你愿意,你可以%renamemyFuncStrmyFunc,从而隐藏的事实,出口到爪哇myFunc实际上是一个包装真正的myFunc

如果这不起作用,Flexo的解决方案Swig: convert return type std::string(binary) to java byte[]可能会。

+0

谢谢你Schollii, 我想测试你的解决方案。但目前我有一些错误,我认为可能取决于我的'unsigned char *'包含任何大于128的ASCII字符 – raff5184

0

我不知道如何使用痛饮,但我知道,如果你改变了主意,想用JNI不介意的话,那么下面的工作:

在在C++方面:

extern "C" jbyteArray JNIEXPORT Java_myPackageName_MyClassName_getByteArray(JNIEnv* env, jobject obj) 
{ 
    jbyteArray byte_arr = env->NewByteArray(size); 

    jbyte bytes[25]; //Some byte array you want to give to java. Could be an unsigned char[25]. 

    for (int i = 65; i < 90; ++i) //filling it with some A-Z ASCII characters. 
    { 
     bytes[i - 65] = i; 
    } 

    env->SetIntArrayRegion(byte_arr, 0, 25, &bytes[0]); //Fill our byte array 

    return byte_arr; //return the byte array.. 
} 

在Java端:

package myPackageName; 

class MyClassName 
{ 
    static { 
     System.loadLibrary("myByteArrayModule"); 
    } 

    public static native byte[] getByteArray(); 
} 
相关问题