java jni 数据类型转换_JNI 数据类型转换 | 学步园

有待实验:

#include

#include "com_test_Test.h"

#include

#include

#include

//获取字符串

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 + " ");

}

}

}


版权声明:本文为weixin_39992831原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。