Java jni字符串转换
程序员文章站
2022-10-04 20:14:36
1、jstring转QString 对于Qt5.2以上(含)可以用QAndroidJniObject::toString(),详见这里:https://*.com/questions/27345570/convert-jstring-to-qstring 低版本的Qt就要自己 ......
1、jstring转QString
对于Qt5.2以上(含)可以用QAndroidJniObject::toString(),详见这里:https://*.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 }
上一篇: 兼容性问题的解决方式(更新中···)
下一篇: 越来越多的公司选择云计算服务的原因