您好,欢迎访问沃航(武汉)科技有限公司官方网站
jni开发中的数据交互
2017-09-25 12:22:55

在jni开发中,由于是java将数据传给C,有几点需要注意。除了C的函数名需要特定的命名外,还有的就是数据之间的转化。

数据间的传化是一个很深的学问,下面小沃就来讲讲一个用的比较多的几个逻辑。

一、java的string类型转为C的char*类型

java的String类型会转化为C的jstring,这里我们就需要重点将jstring转化为char*了。

转化方法如下:

jboolean isCp;
const char *c_pstrCom = (*env) -> GetStringUTFChars(env, pstrCom, &isCp);//这里开辟
//在这里使用
......
(*env) -> ReleaseStringUTFChars(env, pstrCom, c_pstrCom);//这里销毁

二、java是引用类型,通过C的指针返回数据

(1)、这里我们先以简单的int类型为例

java的int[]类型会转化为C的jintArray,下方的代码中,num是jintArray类型的。

实现方式如下:

jint *c_num = (*env) -> GetIntArrayElements(env, num, &isCp);//获取对应元素
(*c_num) = 8888//必须这里赋值


(*env) -> ReleaseIntArrayElements(env, nHandle, c_num, 0);//销毁对应元素

(2)、这种实现方式中,最难实现的,其实是C语言中char*类型的返回

java的char[]类型会转化为C的jcharArray,下方的代码中,buf是jcharArray类型的。

实现方法如下:

char str[]="hello world\n";
jboolean isCp;
jchar *c_buf = (*env) -> GetCharArrayElements(env, buf, &isCp);
int slen = strlen(str);
int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0);
MultiByteToWideChar( CP_ACP, 0, (LPCSTR) str, slen, (LPWSTR) c_buf, length);
(*env) -> ReleaseCharArrayElements(env, buf, c_buf, 0);

后续小沃依旧会继续分享小沃在研发过程中的各种经验,请多专注小沃的微信公共号(武汉网站app智能硬件开发)或是微博号(沃航科技)。


联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn