如何使用swig将wchar\u t数组转换为java的字节数组?
我已经创建了下面的helper函数,但是我无法让它生成一个接受字节数组作为输入的java接口如何使用swig将wchar\u t数组转换为java的字节数组?,java,c,arrays,swig,Java,C,Arrays,Swig,我已经创建了下面的helper函数,但是我无法让它生成一个接受字节数组作为输入的java接口 size_t get_p_wchar_t_bytes(wchar_t *wstr, char * bytes, size_t len) { size_t wlen,cpylen; wlen = count_p_wchar_t_bytes(wstr); cpylen = len > wlen ? wlen : len; memcpy(bytes, wstr, cpyl
size_t get_p_wchar_t_bytes(wchar_t *wstr, char * bytes, size_t len)
{
size_t wlen,cpylen;
wlen = count_p_wchar_t_bytes(wstr);
cpylen = len > wlen ? wlen : len;
memcpy(bytes, wstr, cpylen);
return cpylen;
}
size_t count_p_wchar_t_bytes(wchar_t *wstr)
{
return wcslen(wstr) * sizeof(wchar_t);
}
我在模板中定义了以下内容
%include "arrays_java.i"
%apply int[] {int *};
%include "wchar.i"
问题在于,char*被转换为“字符串”,而不是字节数组,这是没有帮助的
public static long get_p_wchar_t_bytes(SWIGTYPE_p_wchar_t wstr, String bytes, long len)
我想要swig的输出是
public static long get_p_wchar_t_bytes(SWIGTYPE_p_wchar_t wstr, byte[] bytes, long len)
那我该怎么做呢?最终,我只需要一种方法,将一个w_char_t数组以一种它可以使用的格式传递给java,而不产生任何内存泄漏。我通过将模板更改为以下内容来解决这个问题,这是我在
为什么要对字节执行
wchar\u t
?听起来你在试图解决错误的问题。Flexo I有另一个返回sizeof(wchar\t)的函数因此,根据这些信息,我可以确定将字节数组转换为Java字符串的编码是UTF-16还是UTF-32。如果您只是想使其作为Java字符串正常工作,那么这将比需要的复杂得多。
// knows about things like int *OUTPUT:
%include "typemaps.i"
// knows about int32_t
%include "stdint.i"
%include "arrays_java.i"
%apply int[] {int *};
// convert char * to byte array
%apply signed char[] {char* pchar};
%include "wchar.i"