如何使用swig将wchar_t数组转换为java的字节数组?

时间:2014-04-23 04:08:51

标签: java c arrays swig

我创建了以下帮助函数,但是我无法生成一个接受字节数组作为输入的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 *被转换为“String”而不是字节数组,这是无用的。

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,而不会产生任何内存泄漏。

1 个答案:

答案 0 :(得分:1)

我能够通过将模板更改为以下内容来解决此问题,这是我在http://swig.10945.n7.nabble.com/Converting-char-to-byte-String-in-Java-td276.html找到的解决方案

// 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"