JNI入门学习 数据类型[一]

  1. 基本数据类型

    • Java 中的 int 对应 JNI 中的 jint
    • Java 中的 boolean 对应 JNI 中的 jboolean
    • Java 中的 float 对应 JNI 中的 jfloat
    • Java 中的 double 对应 JNI 中的 jdouble
    • Java 中的 byte 对应 JNI 中的 jbyte
    • Java 中的 short 对应 JNI 中的 jshort
    • Java 中的 long 对应 JNI 中的 jlong
    • Java 中的 char 对应 JNI 中的 jchar
  2. 对象类型

    • Java 中的 Object 对应 JNI 中的 jobject
    • Java 中的 Class 对应 JNI 中的 jclass
    • Java 中的数组对应 JNI 中的相应类型,比如 int[] 对应 jintArray
  3. 字符串类型

    • Java 中的 String 对应 JNI 中的 jstring
  4. 其他类型

    • Java 中的 void 对应 JNI 中的 void
    • Java 中的 void* 或者 Object 指针对应 JNI 中的 jlong 或者 intptr_t
    • Java 中的枚举类型等可通过整数表示,在 JNI 中直接使用对应的整数类型。
  5. 例如以下的举例
#include <jni.h>
#include <stdio.h>JNIEXPORT void JNICALL Java_com_ichtj_test_JNIExample_callNativeMethod(JNIEnv *env, jobject obj, jint intValue, jfloat floatValue, jdouble doubleValue, jboolean booleanValue, jchar charValue, jstring stringValue, jintArray intArray) {// 将 Java 中的 int 类型转换为 JNI 中的 jint 类型printf("Received int value in JNI: %d\n", intValue);// 将 Java 中的 float 类型转换为 JNI 中的 jfloat 类型printf("Received float value in JNI: %f\n", floatValue);// 将 Java 中的 double 类型转换为 JNI 中的 jdouble 类型printf("Received double value in JNI: %lf\n", doubleValue);// 将 Java 中的 boolean 类型转换为 JNI 中的 jboolean 类型if (booleanValue) {printf("Received boolean value in JNI: true\n");} else {printf("Received boolean value in JNI: false\n");}// 将 Java 中的 char 类型转换为 JNI 中的 jchar 类型printf("Received char value in JNI: %c\n", charValue);// 将 Java 中的 String 类型转换为 JNI 中的 jstring 类型const char *str = (*env)->GetStringUTFChars(env, stringValue, NULL);printf("Received string value in JNI: %s\n", str);(*env)->ReleaseStringUTFChars(env, stringValue, str);// 将 Java 中的 int[] 类型转换为 JNI 中的 jintArray 类型jint *arrayElements = (*env)->GetIntArrayElements(env, intArray, NULL);jsize length = (*env)->GetArrayLength(env, intArray);printf("Received int array values in JNI: ");for (int i = 0; i < length; i++) {printf("%d ", arrayElements[i]);}printf("\n");(*env)->ReleaseIntArrayElements(env, intArray, arrayElements, 0);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【09】进阶JavaScript事件循环Promise

一、事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 何为线程? 有了进程后,就可以运行程序的代码了。 运行代码的「人」称之…

算法之位运算

常见的位运算操作: 首先先熟悉一下常见的位运算操作: 1. 基础位运算 左移<<, 右移>>, 按位与&, 按位或|, 按位异或^, 按位取反~ 注意: 异或其实是一种无进位相加. 2. 给定一个 n, 确定它的二进制表示中第x位是 0 还是 1 n & (1<<x) 或者 (n>…

软件工程-第11章 内容总结

如果不想读这本书&#xff0c;直接看这一章即可。 11.1 关于软件过程范型 11.2 关于软件设计方法

微信小程序开发学习笔记——4.4常见的导航栏api接口

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;https://www.bilibili.com/video/BV19G4y1K74d?p29&vd_source9b149469177ab5fdc47515e14cf3cf74 一、属性 界面 / 导航栏 / wx.showNavigationBar…

算法练习第二十七天|39. 组合总和、40.组合总和II、131.分割回文串

leetcode题目链接 39. 组合总和 40.组合总和II 131.分割回文串 组合总和 class Solution {List<Integer> path new ArrayList();List<List<Integer>> result new ArrayList();public List<List<Integer>> combinationSum(int[] candidates, i…

“未等待完成”在异步操作还没有完成时,就进行下一次操作,可能导致数据不一致或逻辑错误。

等待异步操作完成就进行下一次操作可能会导致数据不一致或逻辑错误&#xff0c;这在异步操作频繁、互相独立而又不可忽略的场景中尤为常见。下面&#xff0c;我来举个例子帮助解释。 假设我们需要通过异步操作获取用户信息并渲染页面&#xff0c;页面上还需要显示用户的最新发…

Vue3+.NET6前后端分离式管理后台实战(四)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(四)已经发布&#xff0c; 程序源码已打包&#xff0c;感兴趣的可以关注下载。 2&#xff0c;源码打包可以下载&#xff1a;

leecode1793 | 好子数组的最大分数 | 求给高度矩阵最大值

题目我就不念了&#xff0c;就一个字难理解&#xff0c;给的题总是这么难懂&#xff0c;总感觉出题人的语文是体育老师教的&#xff1f; 还有就是思维转变&#xff0c;才能能好的理解&#xff1f;一味的钻牛角尖死理解&#xff0c;效果不好 思维的转变 >悟性&#xff1f;&am…

幼儿教育管理系统|基于jsp 技术+ Mysql+Java的幼儿教育管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

深入理解Ubuntu22:探索Linux操作系统的功能与应用

一、linux &#xff08;一&#xff09;、安装 1、电脑可以安装双系统&#xff0c;即在一套硬件上只能同时运行一个操作系统&#xff0c;例&#xff1a;C盘安装win&#xff0c;D盘安装linux。 2、虚拟机 虚拟机需要硬件支持&#xff0c;并需开启VT-x. 如&#xff1a;Virtual…

Checked Exception和Unchecked Exception 有什么区别?

Checked Exception: 受检异常&#xff0c;是指在Java应用程序中如果受检异常没有被catch或者throws关键字处理的话&#xff0c;程序将无法通过编译。 常见的受检异常: IOExceptionClassNotFoundExceptionSQLException Unchecked Exception:不受检异常&#xff0c;是指在程序中…

气象ARWpost、grads 等使用的ctl和dat格式的grd 二进制文件

气象ARWpost、grads 和 Fortran使用的ctldat格式的grd 二进制文件&#xff0c;在Python中可以用xgrads包来读取或者转成nc 格式使用。 xgrads包官网说明地址&#xff1a;https://xgrads.readthedocs.io/en/latest/ 示例1&#xff0c;打开多个空间场相同&#xff0c;时间不同的 …

安防监控视频汇聚平台EasyCVR接入海康Ehome设备,设备在线但视频无法播放是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

51单片机-蜂鸣器

1.蜂鸣器的介绍 无源蜂鸣器不能一直通电&#xff0c;无源蜂鸣器内部的线圈较小&#xff0c;易烧坏 蜂鸣器的驱动 达林顿晶体管&#xff08;npn型&#xff09; 应用&#xff1a; 按下独立按键同时蜂鸣器响起提示音&#xff0c;数码管显示对应的独立按键键码 #include <REG…

不确定性建模:传感器噪声与输入输出扰动/干扰

鲁棒性在控制系统设计中是至关重要的&#xff0c;因为实际的工程系统容易受到外部干扰和测量噪声的影响&#xff0c;而且在设计中使用的数学模型和实际中的实际系统之间总是存在差异。通常需要一个控制工程师设计一个控制器&#xff0c;使闭环系统稳定&#xff0c;并在存在干扰…

Spring的事务传播机制有哪些?

Spring的事务传播机制用于控制在多个事务方法相互调用时事务的行为。 一、问题解析 在复杂的业务场景中&#xff0c;多个事务方法之间的调用可能会导致事务的不一致&#xff0c;如出现数据丢失、重复提交等问题&#xff0c;使用事务传播机制可以避免这些问题的发生&#xff0c…

C 作用域规则

任何一种编程中&#xff0c;作用域是程序中定义的变量所存在的区域&#xff0c;超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量&#xff1a; 在函数或块内部的局部变量在所有函数外部的全局变量在形式参数的函数参数定义中 让我们来看看什么是局部变量、全局变…

面试算法-66-二叉树的层序遍历

题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 解 class Solut…

HTML实现卷轴动画完整源码附注释

动画效果截图 页面的html结构代码 <!DOCTYPE html> <html> <head lang=

C语言例3-29:使用位逻辑运算符的例子

位逻辑运算符用于对数据中的二进制位进行测试、置位。 按位与的主要作用是提取&#xff08;或保留&#xff09;一个数的某&#xff08;些&#xff09;位&#xff0c;其余各位置0&#xff1b;按位或的主要作用是将一个数的某&#xff08;些&#xff09;位置1&#xff0c;其余各…