NDK java和c参数传递

1、原理

jni实现java和c互通,jni定义了一些数据类型,进行java与C参数传递。
数据类型对应关系如下表:
Java 类型 本地 C 类型
实际表示的 C 类型
(Win32)
说明
boolean jboolean unsigned char 无符号,8 位
byte jbyte signed char 有符号,8 位
char jchar unsigned short 无符号,16 位
short jshort short 有符号,16 位
int jint long 有符号,32 位
long jlong __int64 有符号,64 位
float jfloat float 32 位
double jdouble double 64 位
void void N/A N/A

2、如何将java传入的String参数转换为c的char*?

java传入的String参数,在c文件中被jni转换为jstring的 数据类型
首先在c函数中加入函数参数jstring Java_com_example_as_MainActivity_stringFromJNI(JNIEnv* env,
jobject thiz,jstring fff) ,对应java中函数也改为 public native String  stringFromJNI(String s); 。
在c文件中声明char* test,然后test = (char*)(*env)->GetStringUTFChars(env, jstring, NULL);
注意:test使用完后,通知 虚拟机 平台相关释放相应空间:(*env)->ReleaseStringUTFChars(env, jstring, test);

3、如何把char*转化为java的String

使用 NewStringUTF可以把char* 转化为jstring
char a[10]={0};
a[0]='c';
a[1]='s';
a[2]='\0';
return (*env)->NewStringUTF(env,a);

参考文献:

http://baike.baidu.com/view/1272329.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值