4
回答
jni调用C中方法char[]问题
华为云数据库免费试用   

C程序中定义了一个结构体

struct Gateway
{
     char destIp[16];
     int destPort;
     char  destMac[24];
};

C程序中有一个方法:turnOn(struct Gateway *gw);

那么我java中native方法做C程序包装时传什么样的参数能赋值给 结构体中的 char destIp[16] 呢??

是char[] 吗?

但是我看 java中是byte 对应 C中的 char 呀

小弟对jni和c不熟悉求大哥大姐解答!!


举报
小小发
发帖于3年前 4回/460阅
共有4个答案 最后回答: 3年前

实际上是一个在native层访问java层对象的问题,对吗?

可以将一个byte array传到native层,在native层中,可以通过GetByteArrayElements()函数,从java的byte array中获取到native层可用的jbyte数组,然后对这个数组进行操作。jbyte是一个typedef,类型为signed char。

将java的string对象传递到native层的话,可以通过env->GetStringUTFChars(text, NULL)函数来得到一个char数组,这个数组是字符串UTF-8编码的。

--- 共有 1 条评论 ---
小小发我在下面回复你了,求指导! 3年前 回复

引用来自“WolfCS”的评论

实际上是一个在native层访问java层对象的问题,对吗?

可以将一个byte array传到native层,在native层中,可以通过GetByteArrayElements()函数,从java的byte array中获取到native层可用的jbyte数组,然后对这个数组进行操作。jbyte是一个typedef,类型为signed char。

将java的string对象传递到native层的话,可以通过env->GetStringUTFChars(text, NULL)函数来得到一个char数组,这个数组是字符串UTF-8编码的。

嗯,我实际上是现在要调用别人C写好的方法,这个C方法接收一个结构体参数返回一个结构体参数。

我现在的做法是在java端分别定义与结构体相对应的bean,我现迷惑的就是与之相对应的bean中参数的类型该如何定义

比如有这样一个结构体

struct Response
{
    char result;
    unsigned char status;
    unsigned short color;
    float brightness;
    char mosue[16];

};



在网上的资料上看到,C中的char对应java中的byte 我想是不是

char mosue[16]对应javabean的类型为byte[] mosue 呢?

unsigned char status;对应java中 boolean status 呢
对C完全不熟悉,求指导!谢谢。



顶部