SWIG преобразует приведенный ниже массив без знака («id») в short []. На стороне C атрибут id структуры sender_id_t_ является указателем на массив, который содержит буквенно-цифровые данные, такие как «TEST123-E». Я полагаю, вы могли бы зациклить short [] (sender_id_t_.getId ()) и привести каждый элемент к типу char и объединить для создания строки Java. Мне интересно, если это лучший и более простой способ справиться с этой ситуацией?
C Заголовочный файл:
#define SAMPLE_ID_SIZE_V1 32
#define SAMPLE_ID_SIZE SAMPLE_ID_SIZE_V1
typedef unsigned char sample_id_v1_t[SAMPLE_ID_SIZE];
typedef sample_id_v1_t sample_id_t;
struct sample_sender_id_t_ {
sample_id_t id;
uint32_t idx;
};
typedef struct sample_sender_id_t_ sample_sender_id_t;
SWIG.i:
%rename (Sample) sender_id_t_;
struct sender_id_t_ {
unsigned char id_v1_t[32] id;
uint32_t phy_idx;
};
Исключение:
[exec] test_wrap.c: In function `TestJNI_Sample_1id_1set':
[exec] test_wrap.c:826: error: cast specifies array type
[exec] test_wrap.c:829: error: incompatible types in assignment
[exec] test_wrap.c:832: error: `jarr2' undeclared (first use in this function)