我在.cpp
文件中有一个C ++函数;说unsigned char *myFunc()
。
如何在Java中的byte[]
数组中转换该数组?
我的意思是,在Java中,我想做类似的事情:
byte[] b = myLib.myFunc();
我正在使用SWIG并且显然我需要在unsigned char
文件中定义从byte
到.i
的转换类型,但我并不确切知道如何。< / p>
提前谢谢
答案 0 :(得分:1)
尝试在.i文件中返回std::string
而不是unsigned char*
和%include <std_string.i>
。感谢std_string.i
字体地图,您最终可能会在接收方获得byte[]
。如果您可以更改myFunc
的返回类型,请通过%inline
创建一个包装器,类似
%inline %{
std::string myFuncStr() { return myFunc(); }
%}
如果您希望自己可以%rename
myFuncStr
到myFunc
,从而隐藏了导出到Java的myFunc
实际上是真实myFunc
包装的事实}。
如果这不起作用,Flexo对Swig: convert return type std::string(binary) to java byte[]的解决方案很可能会解决。
答案 1 :(得分:0)
我不知道如何使用swig,但我知道如果你改变主意并且不想使用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();
}