JNI编程对字符串的操作
aide吧
全部回复
仅看楼主
level 12
0_666 楼主
Java的字符编码16位的unicode码,而C/C++则采用8位的ASCII码,因此两者之间只能通过转换才能进行操作,下面来体会一下它们是怎样交互的。
2017年12月22日 05点12分 1
level 12
0_666 楼主
C语言中把字符串按字节存储在一串连续的内存中,通过指针指向首地址进行访问,C++虽然支持String类操作,但也延用C风格的字符串,下面的例子从java层传入两个字符串到C/C++层,进行拼接后再返回到java层,通过android的layout显示出来。
2017年12月22日 06点12分 2
level 12
0_666 楼主
Jni通过这条指令 const char*str=env->GetStringUTFChars(string,boolean)
读取java的字符串,并转换为UTF8编码,存储在指针 str 指向的地址处,让C++进行后续的操作。
2017年12月22日 06点12分 3
level 12
0_666 楼主
字符串处理好后,Jni再通过这条指令env->NewStringUTF(jstring)
把字符串返回到java层,大概就是这个意思,很简单的。
2017年12月22日 06点12分 4
level 12
0_666 楼主
打开aide新建一个本地项目,默认生成HelloJni工程,简单设计一下layout和几个控件以便测试结果。在主类 HelloJni.java 中删除原来的native方法,添加自己的本地方法,形参为两个字符串变题,返回值为 String类型。
2017年12月22日 06点12分 5
level 12
0_666 楼主
接着在jni目录里修改 hello-jni.cpp文件,先包含好自己的头文件,再在getAddString函数体内写代码,用以实现本地方法。
2017年12月22日 07点12分 6
level 12
0_666 楼主
代码简述:先用getStringUTFChars()语句获取到传入的两个字符串,接着创建第三个空字符串,并使它的长度等于前面二个字符串的长度之和,再把第一个字符串拷贝进去,然后把第二个字符串放进去拼接在第一个的后面,完成后返回到 java 层显示效果。
2017年12月22日 07点12分 7
level 12
0_666 楼主
还有两句 Release语句是释放内存,低级语言就是低级!不象 java 那样省心。
2017年12月22日 07点12分 8
level 12
0_666 楼主
在主类调用时先给两个字符串用作实参,点击拼接按钮输出结果。
2017年12月22日 07点12分 9
1