创建Java实用程序函数以将无符号字符数组转换为字符串

时间:2011-12-20 03:22:14

标签: swig

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)

1 个答案:

答案 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; }; 中的一些语法,这有点奇怪。)