Jni中基本类型转换对应的表格
Java类型 | 本地类型 | 说明 |
boolean | jboolean | 无符号,8位 |
byte | jbyte | 无符号,8位 |
char | jchar | 无符号,16位 |
short | jshort | 有符号,16位 |
int | jint | 有符号,32位 |
long | jlong | 有符号,64位 |
float | jfloat | 32位 |
double | jdouble | 64位 |
void | void | 无 |
Java代码:
package com.example.jni;
public class NativeUtil {
// String 转换
public static native String getJniString();
// int转换
public static native int getJniInt();
// boolean转换
public static native boolean getJniBoolean();
// double转换
public static native double getJniDouble();
// float转换
public static native float getJniFloat();
// Byte转换
public static native float getJniByte();
// Byte数组转换
public static native byte[] getJniByteArray();
// String数组转换
public static native String[] getJniStringArray();
// int数组转换
public static native int[] getJniIntArray();
// Long数组转换
public static native long[] getJniLongArray();
}
C代码:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_jni_NativeUtil */
#ifndef _Included_com_example_jni_NativeUtil
#define _Included_com_example_jni_NativeUtil
#define SEED_SIZE 20
#ifdef __cplusplus
extern "C" {
#endif
/*
* String 转换
* Class: com_example_jni_NativeUtil
* Method: getJniString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_jni_NativeUtil_getJniString(
JNIEnv *env, jclass jobj) {
// GetStringUTFChars
return (*env)->NewStringUTF(env, "Hello JNI!");
}
/*
* int 转换
* Class: com_example_jni_NativeUtil
* Method: getJniInt
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_example_jni_NativeUtil_getJniInt(JNIEnv *env,
jclass jobj) {
int i = 13;
return (jint) i;
}
/*
* boolean转换
* Class: com_example_jni_NativeUtil
* Method: getJniBoolean
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_com_example_jni_NativeUtil_getJniBoolean(
JNIEnv *env, jclass jobj) {
unsigned char b = 0;
return (jboolean) b;
}
/*
* double转换
* Class: com_example_jni_NativeUtil
* Method: getJniDouble
* Signature: ()D
*/
JNIEXPORT jdouble JNICALL Java_com_example_jni_NativeUtil_getJniDouble(
JNIEnv *env, jclass jobj) {
double d = 888.88;
return (jdouble) d;
}
/*
* float转换
* Class: com_example_jni_NativeUtil
* Method: getJniFloat
* Signature: ()F
*/
JNIEXPORT jfloat JNICALL Java_com_example_jni_NativeUtil_getJniFloat(
JNIEnv *env, jobject jobj) {
jbyte b = 5;
return (jbyte) b;
}
/*
* byte转换
* Class: com_example_jni_NativeUtil
* Method: getJniByte
* Signature: ()F
*/
JNIEXPORT jfloat JNICALL Java_com_example_jni_NativeUtil_getJniByte(JNIEnv *env,
jobject jobj) {
jfloat f = 5;
return (jfloat) f;
}
/*
* byte数组转换
* Class: com_example_jni_NativeUtil
* Method: getJniByteArray
* Signature: ()[B
*/
JNIEXPORT jbyteArray JNICALL Java_com_example_jni_NativeUtil_getJniByteArray(
JNIEnv *env, jobject jobj) {
int i = 0;
jbyteArray array = (*env)->NewByteArray(env, 16);
jbyte tmp_aeskey[16];
for (i = 0; i < 16; i++) {
jbyte b = 5;
tmp_aeskey[i] = b;
}
(*env)->SetByteArrayRegion(env, array, 0, 16, tmp_aeskey);
return array;
}
/**
* int数组转换
*/
JNIEXPORT jintArray JNICALL Java_com_example_jni_NativeUtil_getJniIntArray(
JNIEnv *env, jobject jobj) {
int i = 1;
jintArray array; //定义数组对象
array = (*env)->NewIntArray(env, 10);
for (; i <= 10; i++) {
(*env)->SetIntArrayRegion(env, array, i - 1, 1, &i);
}
jint* elems = (*env)->GetIntArrayElements(env, array, 0);
return array;
}
/**
* long数组转换
*/
JNIEXPORT jlongArray JNICALL Java_com_example_jni_NativeUtil_getJniLongArray(
JNIEnv *env, jobject jobj) {
int i = 1;
jlongArray array; //定义数组对象
array = (*env)->NewLongArray(env, 10);
for (; i <= 10; i++) {
(*env)->SetLongArrayRegion(env, array, i - 1, 1, &i);
}
jint* elems = (*env)->GetLongArrayElements(env, array, 0);
return array;
}
#ifdef __cplusplus
}
#endif
#endif