jni jstring类型与c++字符串类型相互转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jni jstring类型与c++字符串类型相互转换相关的知识,希望对你有一定的参考价值。

我这个代码报错,说表达式必须包含指针类型

参考技术A 你把你代码里 (*env)-> 的地方都改成 env-> 就好了.
你这明显的是指针语法用错追问

不好使啊~

追答

怎么能用双"->"啊. 去掉!
比如第一行
jclass clsstring =env->findclass(env,.....

追问

应该不是想的那样,要不你给我一个你的邮箱  ,我把源码发给你,改好后,我采纳你

Java jni字符串转换

1、jstring转QString

对于Qt5.2以上(含)可以用QAndroidJniObject::toString(),详见这里:https://stackoverflow.com/questions/27345570/convert-jstring-to-qstring

低版本的Qt就要自己转换了,jni中有两个获取jstring的方法:

GetStringUTFChars——获取(改进的)utf8编码字符串

GetStringChars——获取unicode编码字符串,推荐用这种,因为Java内部就是unicode编码,可减少一次编码转换

 1     jboolean isCopy = JNI_FALSE;
 2     const jchar* value = env->GetStringChars(jstringValue, &isCopy);
 3     if (value != NULL)
 4     {
 5         QString qsValue = QString::fromUtf16(value);
 6         if (isCopy)
 7         {
 8             env->ReleaseStringChars(jstringValue, value);
 9         }
10     }

 

另外关于GetStringUTFChars返回的是(改进的)utf8编码字符串,可以参考这篇文章:https://blog.wsxyeah.xyz/2016/07/23/jni-charset-encoding/

 

2、jstring转BSTR

因为BSTR就是unicode编码,用GetStringChars转换很方便:

 1     jboolean isCopy = JNI_FALSE;
 2     const jchar* paramValue = env->GetStringChars(jstrParam, &isCopy);
 3     if (paramValue != NULL)
 4     {
 5         BSTR bstr = SysAllocString(paramValue); //使用后记得释放:SysFreeString(bstr);
 6         if (isCopy)
 7         {
 8             env->ReleaseStringChars(jstrParam, paramValue);
 9         }
10     }

 

以上是关于jni jstring类型与c++字符串类型相互转换的主要内容,如果未能解决你的问题,请参考以下文章

C++ 数字转字符串 double 转换成字符串 就是char类型的 或者是 jstring也行

Java jni字符串转换

jni 字符串的梳理 2 字符串的处理操作

我的Android进阶之旅NDK开发之C++如何相互转换jstring和char*

我的Android进阶之旅NDK开发之C++如何相互转换jstring和char*

JNI C创建Java字符串数组