2014-04-14 52 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(); 
} 
相關問題