Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用swig将wchar\u t数组转换为java的字节数组?_Java_C_Arrays_Swig - Fatal编程技术网

如何使用swig将wchar\u t数组转换为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

我已经创建了下面的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, 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"