多语言展示
当前在线:1489今日阅读:27今日分享:41

Android C++ NDK中如何操作字符串数据类型呢?

在Android项目中使用NDK进行开发,最基础和最常见的就是对字符串引用数据类型的操作。让我们来看看如何操作字符串。
工具/原料
1

Android Studio 3

2

安卓手机

方法/步骤
1

NDK操作字符串与字符串有关的操作在JNI里面把Java中的字符串当成是引用数据类型进行处理。这些引用类型并不能像原生C/C++直接拿来使用,而是需要必要的函数进行转换。如图NewString函数和NewStringUTF函数。

2

C++文件中创建字符串我们可以在Native代码中用NewString函数构建Unicode编码格式的字符串对象,用NewStringUTF函数构建UTF-8编码格式的字符串对象(如图:创建jstring对象返回给Java层.png)。如果有内存溢出的情况,那么result就会是NULL以通知Native代码抛出异常。NewStringUTF函数创建字符串:jstring result = _env->NewStringUTF('我是C++层的字符串');

3

把Java字符串转换成Native字符串NDK开发中为了在C++代码中使用Java字符串,我们需要将Java字符串进行转换成C++字符串。用GetStringChars函数将Unicode格式的Java字符串转换成C字符串;用GetStringUTFChars函数将UTF-8格式的Java字符串转成C字符串。其中第二个参数是可选参数,名字是isCopy,可以让我们确定转换后返回的C++字符串地址是指向副本还是指向堆中的固定对象。(如图:将Java字符串转换成C++字符串.png)

4

在C++中使用完字符串要进行释放通过GetStringChars函数和GetStringUTFChars函数获得的C++字符串,在Native代码中使用完以后要正确地释放掉(如图:释放掉获取的C++字符串.png),否则可能会引起内存溢出。JNI中为我们提供了两个类型的释放函数,用ReleaseStringChars释放Unicode编码格式的字符串,用ReleaseStringUTFChars释放UTF-8编码格式的字符串。

注意事项
1

在Native层分配的资源一定要记得进行释放。否则会引起内存溢出。

2

使用JNI函数转换时,一定根据编码格式进行选择,UTF-8的格式的字符串在创建时使用NewUTFString,转换时使用GetStringUTFChars,Unicode的格式的字符串在创建时使用NewString,转换时使用GetStringChars。

推荐信息