JNI 数据类型转换

    #include <jni.h>  
    #include "com_test_Test.h"  
    #include <stdio.h>  
    #include <stdlib.h>  
    #include <strings.h>  
      
    //获取字符串  
    JNIEXPORT void JNICALL Java_com_test_Test_sayHello(JNIEnv * env, jobject obj,  
      jstring s) {  
      
     char * str = (char *) (*env)->GetStringUTFChars(env, s, 0);  
     printf("\n c-string: hello - %s", str);  
      
    }  
      
    //获取,返回int  
    JNIEXPORT jint JNICALL Java_com_test_Test_add(JNIEnv * env, jobject obj,  
      jint a, jint b) {  
     int i = a;  
     int j = b;  
     printf("\n c-int: %d - %d", i, j);  
     char str[256];  
     sprintf(str, "%d", i + j);  
     return (jint) i + j;  
    }  
      
    //获取,返回float  
    JNIEXPORT jfloat JNICALL Java_com_test_Test_getFloat(JNIEnv * env, jobject obj,  
      jfloat f) {  
     float fl = f;  
     printf("\n c-float: %3f", fl);  
      
     fl = 200.555;  
     return (jfloat) fl;  
    }  
      
    //获取,返回 double  
    JNIEXPORT jdouble JNICALL Java_com_test_Test_getDouble(JNIEnv * env,  
      jobject obj, jdouble dou) {  
     double d = dou;  
     printf("\n c-double: %3f", d);  
      
     d = 800.88;  
     return (jdouble) d;  
    }  
      
    //获取,返回boolean  
    JNIEXPORT jboolean JNICALL Java_com_test_Test_getBoolean(JNIEnv * env,  
      jobject obj, jboolean bool) {  
      
     unsigned char b = bool;  
     printf("\n c-boolean: %lu  ", b);  
     if (b) {  
      printf("true");  
     } else {  
      printf("false");  
     }  
      
     b = 1;  
     return (jboolean) b;  
    }  
      
    //获取,返回 string  
    JNIEXPORT jstring JNICALL Java_com_test_Test_getString(JNIEnv * env,  
      jobject obj, jstring s) {  
     char * st = (char *) (*env)->GetStringUTFChars(env, s, 0);  
     printf("\n c-string:  %s", st);  
      
     char * str = "hello wang wu!";  
     jstring rtn;  
     rtn = (*env)->NewStringUTF(env, str);  
     return rtn;  
    }  
      
    //获取,返回 string []  
    JNIEXPORT jobjectArray JNICALL Java_com_test_Test_getStringArray(JNIEnv * env,  
      jobject obj, jobjectArray arr) {  
     int len = (*env)->GetArrayLength(env, arr);  
     printf("\n c-stringArray :");  
     int i = 0;  
     for (i = 0; i < len; i++) {  
      jobject obj = (*env)->GetObjectArrayElement(env, arr, i);  
      jstring str = (jstring) obj;  
      const char * szStr = (*env)->GetStringUTFChars(env, str, 0);  
      printf(" %d-%s ", i, szStr);  
      (*env)->ReleaseStringChars(env, str, szStr);  
     }  
     //-----返回----  
      
     jstring str;  
     jobjectArray args = 0;  
     jsize size = 5;  
     char* sa[] = { "Hello,", "world!", "zhang", "san", "yuang" };  
     int j = 0;  
     jclass objClass = (*env)->FindClass(env, "java/lang/String");  
     args = (*env)->NewObjectArray(env, size, objClass, 0);  
     for (j = 0; j < size; j++) {  
      str = (*env)->NewStringUTF(env, sa[j]);  
      (*env)->SetObjectArrayElement(env, args, j, str);  
     }  
     return args;  
    }  
      
    -----------------------------------------------------------------  
      
    下面是Test.java  
      
    package com.test;  
      
    public class Test {  
     private native void sayHello(String str);  
      
     private native int add(int a, int b);  
      
     private native float getFloat(float f);  
      
     private native double getDouble(double d);  
      
     private native boolean getBoolean(boolean b);  
      
     private native String getString(String str);  
      
     private native String[] getStringArray(String[] sa);  
      
     static {  
      System.loadLibrary("Test");  
     }  
      
     public static void main(String[] args) {  
      Test test = new Test();  
      test.sayHello("zhang san");  
      System.out.println("int     --> " + test.add(10, 20));  
      System.out.println("float   --> " + test.getFloat((float) 20.123));  
      System.out.println("double  --> " + test.getDouble(100.369));  
      System.out.println("boolean --> " + test.getBoolean(true));  
      System.out.println("string  --> " + test.getString("wang Wu"));  
      
      String[] ss = { "hello", "-", "zhang", "san" };  
      Object[] obj = test.getStringArray(ss);  
      System.out.print("string[]-->  ");  
      for (Object object : obj) {  
       System.out.print(object + " ");  
      }  
      
     }  
      
    }  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值