Как преобразовать массив wchar_t в байтовый массив для Java с помощью Swig?

1

Я создал следующую вспомогательную функцию, но я не могу заставить ее генерировать 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 в формате, с которым он может работать, без создания утечек памяти.

  • 0
    Почему вы хотите сделать wchar_t для байта? Похоже, вы пытаетесь решить не ту проблему.
  • 0
    Flexo У меня есть другая функция, которая возвращает sizeof (wchar_t), поэтому с помощью этой информации я могу определить, является ли кодировка UTF-16 или UTF-32 для преобразования байтового массива в строку Java.
Показать ещё 1 комментарий
Теги:
arrays
swig

1 ответ

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"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню