我在.cpp
文件中有一個C++函數;說unsigned char *myFunc()
。 如何在Java中的byte[]
數組中轉換該數組? 我的意思是,在Java中,我想要做的事,如:Swig:將無符號字符數組從C++傳遞到Java
byte[] b = myLib.myFunc();
我使用痛飲和appearently我需要從unsigned char
在.i
文件中定義了一種轉化爲byte
,但我不」不知道如何。
預先感謝您
我在.cpp
文件中有一個C++函數;說unsigned char *myFunc()
。 如何在Java中的byte[]
數組中轉換該數組? 我的意思是,在Java中,我想要做的事,如:Swig:將無符號字符數組從C++傳遞到Java
byte[] b = myLib.myFunc();
我使用痛飲和appearently我需要從unsigned char
在.i
文件中定義了一種轉化爲byte
,但我不」不知道如何。
預先感謝您
嘗試返回std::string
而不是在您的.i文件中的unsigned char*
和%include <std_string.i>
。感謝std_string.i
typemaps,您可能會在接收端收到byte[]
。如果你可以改變的myFunc
返回類型,然後通過%inline
創建一個包裝,像
%inline %{
std::string myFuncStr() { return myFunc(); }
%}
如果你願意,你可以%rename
myFuncStr
到myFunc
,從而隱藏的事實,出口到爪哇myFunc
實際上是一個包裝真正的myFunc
。
如果這不起作用,Flexo的解決方案Swig: convert return type std::string(binary) to java byte[]可能會。
我不知道如何使用痛飲,但我知道,如果你改變了主意,想用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();
}
謝謝你Schollii, 我想測試你的解決方案。但目前我有一些錯誤,我認爲可能取決於我的'unsigned char *'包含任何大於128的ASCII字符 – raff5184