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的字符串,数组处理的更多相关文章

  1. 剑指Offer 49. 把字符串转换成整数 (字符串)

    题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...

  2. 把json格式的字符串转换成javascript对象或数组

      第一种 JSON.parse(jsonString) 第二种 eval("("+jsonString+")") 第三种 var obj=(function ...

  3. js字符串转换成数字与数字转换成字符串的实现方法

    转载:点击查看地址 js字符串转换成数字 将字符串转换成数字,得用到parseInt函数.parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseInt(' ...

  4. js字符串转换成数字,数字转换成字符串

    转自网络,忘记出处了. js字符串转换成数字 将字符串转换成数字,得用到parseInt函数. parseInt(string) : 函数从string的开始解析,返回一个整数. 举例:parseIn ...

  5. Java—JSON串转换成实体Bean对象模板

    介绍 模板需求说明   开发中经常遇到前端传递过来的JSON串的转换,后端需要解析成对象,有解析成List的,也有解析成Map的. 依赖 <dependency> <groupId& ...

  6. php将一个字符串转变成键值对数组的效率问题

    有这样一种需求,将形式为"TranAbbr=IPER|AcqSsn=000000073601|MercDtTm=20090615144037"的字符串转换成如下格式的数组: Arr ...

  7. Java将ip字符串转换成整数的代码

    下面代码是关于Java将ip字符串转换成整数的代码,希望对各位有较大用途. public class IpUtil { public static int Ip2Int(String strIp){ ...

  8. 【Java】 剑指offer(67) 把字符串转换成整数

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能 ...

  9. 转换成json字符串,与json字符串转换成java类型都要先转换成json对象

    转换成json字符串,与json字符串转换成java类型都要先转换成json对象

随机推荐

  1. 【Linux安全】防止 root 用户远程登录

    防止 root 用户远程登录,在终端输入以下命令: vim /etc/ssh/sshd_config 修改如下行为:no PermitRootLogin no 如图所示:

  2. gif录制工具

    gif录制工具 This tool allows you to record a selected area of your screen and save it as a Gif. http://s ...

  3. git获取远端版本库上的Tag (没有clone[远端的版本库太大了])

    方法一 http://stackoverflow.com/questions/25815202/git-fetch-a-single-commit The git fetch command deli ...

  4. 部署解决方案包 (SharePoint Server 2010)

    转:http://technet.microsoft.com/zh-cn/library/cc262995(v=office.14).aspx 本文介绍各个解决方案包,及其在 Microsoft Sh ...

  5. 利用HttpWebRequest和HttpWebResponse获取Cookie

    之前看过某个同学的一篇有关与使用JSoup解析学校图书馆的文章,仔细一看,发现竟然是同校!!既然对方用的是java,那么我也就来个C#好了,虽然我的入门语言是java. C#没有JSoup这样方便的东 ...

  6. 分布式缓存系统Memcached简介与实践(.NET memcached client library)

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

  7. ArcSDE 10.1安装、配置、连接 (SQL Server 2008)

    转自:http://blog.csdn.net/esrichinacd/article/details/8510224 1  概述 ArcSDE 10.1的安装配置相较于ArcSDE 10.0和之前版 ...

  8. [King.yue]Ext.NET相比WebForm的优势

    1)更好的用户体验.(生产力++) 虽然WebForm可以使用微软的Ajax以及Ajax控件进行开发,但是用户体验还是远远不及extjs.而且你可以跟客户忽悠,这个功能多么滴难做,多么好,但是我们做出 ...

  9. leetcode—pascal triangle

    1.题目描述 Given numRows, generate the first numRows of Pascal's triangle.   For example, given numRows ...

  10. Galgame引擎编写,实现对话文本显示

    class cTalk { public: cTalk(); ~cTalk(); void Init(); void Shutdown(); void SetSpeed(int speed); voi ...