android112 jni 把java的字符串转换成c的字符串,数组处理
package com.itheima.charencode; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.EditText; public class MainActivity extends Activity { private EditText et;
static{
System.loadLibrary("hello");//导入类库
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et = (EditText) findViewById(R.id.et); } public void click1(View v){
String text = et.getText().toString();
et.setText(encode(text, text.length()));
}
public void click2(View v){
String text = et.getText().toString();
et.setText(decode(text, text.length()));
} public native String encode(String text, int length);
public native String decode(String text, int length);
}
#include <jni.h>
#include <string.h>
//把java的字符串转换成c的字符串
char* Jstring2CStr(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;
jclass clsstring = (*env)->FindClass(env,"java/lang/String");
jstring strencode = (*env)->NewStringUTF(env,"GB2312");
jmethodID mid = (*env)->GetMethodID(env,clsstring, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray barr= (jbyteArray)(*env)->CallObjectMethod(env,jstr,mid,strencode); // String .getByte("GB2312");
jsize alen = (*env)->GetArrayLength(env,barr);
jbyte* ba = (*env)->GetByteArrayElements(env,barr,JNI_FALSE);
if(alen > )
{
rtn = (char*)malloc(alen+); //"\0"
memcpy(rtn,ba,alen);
rtn[alen]=;
}
(*env)->ReleaseByteArrayElements(env,barr,ba,); //
return rtn;
} JNIEXPORT jstring JNICALL Java_com_itheima_charencode_MainActivity_encode
(JNIEnv * env, jobject obj, jstring jstr, jint lenght){
char* cstr = Jstring2CStr(env, jstr);
int i;
for(i = ;i < lenght; i++){
*(cstr + i) += ;
}
return (*env)->NewStringUTF(env, cstr);
} /*
* Class: com_itheima_charencode_MainActivity
* Method: decode
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_itheima_charencode_MainActivity_decode
(JNIEnv * env, jobject obj, jstring jstr, jint lenght){
char* cstr = Jstring2CStr(env, jstr);
int i;
for(i = ;i < lenght; i++){
*(cstr + i) -= ;
}
return (*env)->NewStringUTF(env, cstr);
}
数组处理:
package com.itheima.array; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View; public class MainActivity extends Activity { static{
System.loadLibrary("hello");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} int[] arr = {,,,,}; public void click(View v){
arrayEncode(arr);
for (int i : arr) {//上面已经对数组内存进行了改变,所以此处是修改后的数组
System.out.println(i);
}
} public native void arrayEncode(int[] arr);
}
/*
hello.c文件: #include <jni.h> JNIEXPORT void JNICALL Java_com_itheima_array_MainActivity_arrayEncode
(JNIEnv * env, jobject obj, jintArray jintarr){//jintArray是整型数组,jni中所有的数组都是指针类型
//拿到整型数组的长度以及第0个元素的地址
//jsize (*GetArrayLength)(JNIEnv*, jarray);jsize就是int类型(jni.h文件都有定义)
int length = (*env)->GetArrayLength(env, jintarr);
//jint* (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);jint就是int类型
int* arrp = (*env)->GetIntArrayElements(env, jintarr, 0);//得到第0个元素的地址 int i;
for(i = 0;i < length; i++){//数组是连续的内存空间,有了数组长度和数组第0个元素地址就相当于拿到了所有数组。
*(arrp + i) += 10;//每个元素加10
}
}*/
android112 jni 把java的字符串转换成c的字符串,数组处理的更多相关文章
- 剑指Offer 49. 把字符串转换成整数 (字符串)
题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...
- 把json格式的字符串转换成javascript对象或数组
第一种 JSON.parse(jsonString) 第二种 eval("("+jsonString+")") 第三种 var obj=(function ...
- js字符串转换成数字与数字转换成字符串的实现方法
转载:点击查看地址 js字符串转换成数字 将字符串转换成数字,得用到parseInt函数.parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseInt(' ...
- js字符串转换成数字,数字转换成字符串
转自网络,忘记出处了. js字符串转换成数字 将字符串转换成数字,得用到parseInt函数. parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseIn ...
- Java—JSON串转换成实体Bean对象模板
介绍 模板需求说明 开发中经常遇到前端传递过来的JSON串的转换,后端需要解析成对象,有解析成List的,也有解析成Map的. 依赖 <dependency> <groupId& ...
- php将一个字符串转变成键值对数组的效率问题
有这样一种需求,将形式为"TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037"的字符串转换成如下格式的数组: Arr ...
- Java将ip字符串转换成整数的代码
下面代码是关于Java将ip字符串转换成整数的代码,希望对各位有较大用途. public class IpUtil { public static int Ip2Int(String strIp){ ...
- 【Java】 剑指offer(67) 把字符串转换成整数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能 ...
- 转换成json字符串,与json字符串转换成java类型都要先转换成json对象
转换成json字符串,与json字符串转换成java类型都要先转换成json对象
随机推荐
- 酷盘kanbox获得B轮2000万美元融资
和阿里近期收购以穷游.虾米为代表的一批小网站相似,酷盘也属于个人用户数量级别庞大,但商业模式并不明晰的企业.目前阿里巴巴集团旗下的阿里云公司拥有自己的云存储业务,其本身既有面向个人用户的产品,也有面向 ...
- string.Split函数
正文 string str = "a---b---c"; string[] array = str.Split(new char[]{'-'}); 分割之后array中的元素为 分 ...
- Webform——验证控件
验证控件一般是在注册的时候用到,是直接将JS代码封装到了控件里面,拉过来直接可以用,下面介绍一下主要用法: 1.CompareValidator:比较验证 常用属性:ControlToCompare ...
- Shape 与 InlineShape 的区别
Shape 对象代表文档中的图形对象,InlineShape 代表文档中的嵌入式图形对象.所谓嵌入式图形对象,是指将图像作为文字处理,在排版上以文字的方式进行排版. Shape 与 InlineSha ...
- C#调用C++的DLL函数另一则(delegate) z
使用DLLImport进行导入函数的事. C#调用C++的函数其实不止这一种方法, 还有一种方法是用delegate申明函数委托进行调用,这种方法略显麻烦,但是可以进行回调并应用指针. 在C#中,首先 ...
- boost总结之any
boost中any库相对variant简单,any可以不限定类型,variant中对我们事先会定义好我们所需的类型,但是any无此限制,any的类型检测是在run time时. boost::an ...
- POJ 1200 Crazy Search
思路:利用Karp-Rabin算法的思想,对每个子串进行Hash,如果Hash值相等则认为这两个子串是相同的(事实上还需要做进一步检查),Karp-Rabin算法的Hash函数有多种形式,但思想都是把 ...
- ionic如何uglify和minify你的js,css,image,png....
Install: 1.ionic start myapp blank 2.cd myapp 3.npm install cordova-uglify or npm install ...
- C#调用VC dll输出参数
最近做项目需要把以前Vc写的程序整合到VS2005来,用c#写的,以前VC的动态连接库写好了,重写比较麻烦,让C#调用VC dll就好了.但碰到了一个问题:VC中作为输出参数的char*类型的变量应该 ...
- HW2.11
控制台: import java.util.Scanner; public class Solution { public static void main(String[] args) { Scan ...