创建 Java 实用函数以将无符号字符数组转换为字符串
Posted
技术标签:
【中文标题】创建 Java 实用函数以将无符号字符数组转换为字符串【英文标题】:Create Java Utility Function to Convert Unsigned Char Array to String 【发布时间】:2011-12-20 03:22:13 【问题描述】:SWIG 将以下无符号字符数组(“id”)转换为 short[]。在 C 端,sender_id_t_ 结构的 id 属性是指向包含字母数字数据的数组的指针,例如“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)
【问题讨论】:
【参考方案1】:它被视为short
的数组,因为该类型的unsigned
使得最大值太大而无法放入(有符号的)byte
或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;
;
(我必须在你的struct
中修正一些语法,这有点奇怪)。
【讨论】:
C 头文件中的结构对我来说有点奇怪(现在包括上面的那个)。对于 sender_id_t_ 结构,我可能没有正确的 SWIG.i 定义。当我按照您的建议尝试 %apply char * 时,出现类型兼容性错误,完整堆栈也在上面。根据我提供的 C 头文件,你知道正确的 SWIG.i 结构吗? @c12 - 使 SWIG 界面中struct
的内容与头文件匹配 - 该错误是因为 SWIG.i 中的 id
与我怀疑的头文件非常不同。以上是关于创建 Java 实用函数以将无符号字符数组转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章