Android中JNI使用详解(4)---Java与C之间数据类型转换

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





  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值