SWIG将下面的unsigned char数组(“id”)转换为short []。在C端,sender_id_t_结构的id属性是指向包含字母数字数据的数组的指针,如“TEST123-E”。我想你可以遍历short [](sender_id_t_.getId())并将每个元素转换为char并连接以构建Java String。我想知道他们是否更好,更简单地处理这种情况?
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)
答案 0 :(得分:1)
由于该类型的short
,它被视为unsigned
数组,这使得最大值太大而无法放入(带符号)byte
或{{1} }}。如果您想强制它被char
处理,您可以使用String
来使用普通的%apply
字体图,例如:
String
(我必须修复%module test
%rename (Sample) sender_id_t_;
%apply char * { unsigned char id[32] };
struct sender_id_t_ {
unsigned char id[32];
uint32_t phy_idx;
};
中的一些语法,这有点奇怪。)