Jni :三维数组处理方法 ,以整形三维数组为例 C++实现
本文原创,转载请注明地址:http://www.cnblogs.com/baokang/p/4982846.html
关于Jni的基本使用方法,请参阅:Java 调用 C++ (Java 调用 dll)康哥手把手教你
关于Jni的调试,请参阅:Jni 调试 : eclipse + Vs 联合调试
不废话了,直接上代码
1.java native 接口
/**
* 将三维数组src中的每一个元素平方,dst进行输出
* @param src 输入
* @param dst 输出
*/
public native static void calThreeDimensional(int[][][] src,int[][][] dst);
2.Jni 接口实现
/*
* Class: com_bk_jnidemo_JniDemo
* Method: calThreeDimensional
* Signature: ([[[I[[[I)V
*/
JNIEXPORT void JNICALL Java_com_bk_jnidemo_JniDemo_calThreeDimensional(JNIEnv *env, jclass cls, jobjectArray src, jobjectArray dst)
{
int x,y,z;
jobjectArray src_xy,dst_xy;
jintArray src_x,dst_x;
jint temp;
jint *xSrcValues;
jint *xDstValues; /*------------------------获取x,y,z三个维度数-----------------------*/
src_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(src,0));
dst_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(dst,0)); src_x=static_cast<jintArray>(env->GetObjectArrayElement(src_xy,0));
dst_x=static_cast<jintArray>(env->GetObjectArrayElement(dst_xy,0)); z=env->GetArrayLength(src);
y=env->GetArrayLength(src_xy);
x=env->GetArrayLength(src_x); /*------------------------三层循环处理-----------------------------*/
for(int i=0;i<z;i++)
{
src_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(src,i));
dst_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(dst,i)); for(int j=0;j<y;j++)
{
src_x=static_cast<jintArray>(env->GetObjectArrayElement(src_xy,j));
dst_x=static_cast<jintArray>(env->GetObjectArrayElement(dst_xy,j)); xSrcValues=env->GetIntArrayElements(src_x,NULL);
xDstValues=env->GetIntArrayElements(dst_x,NULL);
for(int k=0;k<x;k++)
{
/*--------此处进行单个元素处理----------*/
xDstValues[k]=xSrcValues[k]*xSrcValues[k];
}
/*-------------------数据写回:x层---------------------*/
env->ReleaseIntArrayElements(src_x,xSrcValues,JNI_ABORT);
env->ReleaseIntArrayElements(dst_x,xDstValues,0); /*----------------数据写回:y层----------*/
env->SetObjectArrayElement(dst_xy,j,dst_x);
}
/*---------------数据写回:z层---------*/
env->SetObjectArrayElement(dst,i,dst_xy);
}
}
Jni :三维数组处理方法 ,以整形三维数组为例 C++实现的更多相关文章
- JavaScript数组对象方法
数组的方法:首先,数组的方法有数组原型方法,也有从object对象继承来的方法.这里只详细说明一下数组的原型方法. (1)join:把数组中的所有元素放入一个字符串.元素通过指定的分隔符进行分隔. 例 ...
- JavaScript ES6 数组新方法 学习随笔
JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...
- js类数组转数组的方法(ArrayLike)
1. 什么是类数组ArrayLike(类数组 就是一个普通的 js对象) 类数组对象必须含有 length 属性,且元素属性名必须是数值或者可转换为数值的字符. 类数组对象不是数组对象,所以没有数 ...
- 科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)
Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...
- .net学习之.net和C#关系、运行过程、数据类型、类型转换、值类型和引用类型、数组以及方法参数等
1..net 和 C# 的关系.net 是一个平台,C#是种语言,C#语言可以通过.net平台来编写.部署.运行.net应用程序,C#通过.net平台开发.net应用程序2..net平台的重要组成FC ...
- php中定义数组的方法
1.PHP定义数组的格式 数组名=array(); 如:$aa=array();//这样就定义了一个数组, 之后给元素赋值: $aa[0]="9016"; $aa[1]=" ...
- 我能考虑到的数组(老)方法就这些了(es5)
代码注释都写的很清楚了 关键字:斐波那契数组.二维数组.多维数组(矩阵)... <!DOCTYPE html> <html lang="en"> <h ...
- [Effective JavaScript 笔记]第51条:在类数组对象上复用通用的数组方法
前面有几条都讲过关于Array.prototype的标准方法.这些标准方法被设计成其他对象可复用的方法,即使这些对象并没有继承Array. arguments对象 在22条中提到的函数argument ...
- JNI动态注册native方法及JNI数据使用
前言 或许你知道了jni的简单调用,其实不算什么百度谷歌一大把,虽然这些jni绝大多数情况下都不会让我们安卓工程师来弄,毕竟还是有点难,但是我们还是得打破砂锅知道为什么这样干吧,至少也让我们知道调用流 ...
随机推荐
- [LeetCode] Add Digits 加数字
Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. ...
- [LeetCode] Excel Sheet Column Title 求Excel表列名称
Given a positive integer, return its corresponding column title as appear in an Excel sheet. For exa ...
- 编译自己的Ubuntu内核
很多时候我们在使用Ubuntu的时候,想修改一下内核配置,然后编译,安装到Ubuntu中.这也是进行Ubuntu内核开发的前提. 获取当前Ubuntu对应代码 有很多方法可以获得Ubuntu内核代码, ...
- python网络编程-socket编程
一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...
- 修改 jquery.validate.js 支持非form标签
尝试使用markdown来写一篇blog,啦啦啦 源代码传送门:github 在特殊情况下我们使用jquery.validate.js对用户输入的内容做验证的时候,表单并不是一定包含在form之中,有 ...
- 修改hosts文件在本地使域名解析到指定IP
# Additionally, comments (such as these) may be inserted on individual # lines or following the mac ...
- vue.js第七课
条件渲染 v-if template v-if v-show v-else v-if 与 v-show handlebars.js 1.v-if 如果我们想一次 控制 多个元素呢? 我们可以吧一个 ...
- css中,设置百分比后,让百分比的宽度包括padding和border来计算
*{ -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box;}
- js获取当前域名、Url、相对路径和参数以及指定参数
一.js获取当前域名有2种方法 1.方法一 var domain = document.domain; 2.方法二 var domain = window.location.host; 3.注意问题 ...
- 兄弟连javascript学习笔记
/* Javascript:用来在页面中编写特效,和HTML.CSS一样都是有浏览器解析 Javascript语言: 一.JS如何运行(javascript,jscript,vbscript,appl ...