我在.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