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编码,可减少一次编码转换
jboolean isCopy = JNI_FALSE;
const jchar* value = env->GetStringChars(jstringValue, &isCopy);
if (value != NULL)
{
QString qsValue = QString::fromUtf16(value);
if (isCopy)
{
env->ReleaseStringChars(jstringValue, value);
}
}
另外关于GetStringUTFChars返回的是(改进的)utf8编码字符串,可以参考这篇文章:https://blog.wsxyeah.xyz/2016/07/23/jni-charset-encoding/
2、jstring转BSTR
因为BSTR就是unicode编码,用GetStringChars转换很方便:
jboolean isCopy = JNI_FALSE;
const jchar* paramValue = env->GetStringChars(jstrParam, &isCopy);
if (paramValue != NULL)
{
BSTR bstr = SysAllocString(paramValue); //使用后记得释放:SysFreeString(bstr);
if (isCopy)
{
env->ReleaseStringChars(jstrParam, paramValue);
}
}
Java jni字符串转换的更多相关文章
- android112 jni 把java的字符串转换成c的字符串,数组处理
package com.itheima.charencode; import android.os.Bundle; import android.app.Activity; import androi ...
- java 二进制数字符串转换工具类
java 二进制数字符串转换工具类 将二进制转换成八进制 将二进制转换成十进制 将二进制转换成十六进制 将十进制转换成二进制 package com.iteye.injavawetrust.ad; i ...
- java之字符串转换
参考http://how2j.cn/k/number-string/number-string-parse/317.html 数字转字符串 方法1: 使用String类的静态方法valueOf 方法2 ...
- Java实现字符串转换成整数
1 问题描述 输入一个由数字组成的字符串,请把它转换成整数并输出.例如,输入字符串"123",输出整数123. 请写出一个函数实现该功能,不能使用库函数. 2 解决方案 解答本问题 ...
- Java实现字符串转换十六进制MD5值
public class Encode { public final static String md5(String s) { char hexDigits[] = { '0', ...
- java自带BASE64工具进行图片和字符串转换
java自带BASE64工具进行图片和字符串转换 import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...
- Java字符串转换
public class StringConvertToInt{ public static void main(String[] args) { String a ="12a34bW()5 ...
- Java将一段逗号分割的字符串转换成一个数组
String 类:String 类代表字符串.Java 程序中的所有字符串字面值都作为此类的实例实现.字符串是常量,它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因为 String 对象是 ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
随机推荐
- .NET Core跨平台微服务学习资源
一.Asp.net Core基础 微软英文官网:https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-2.1 .NET Core: ...
- Kafka实战-入门
1.概述 经过一个多月的时间观察,业务上在集成Kafka后,各方面还算稳定,这里打算抽时间给大家分享一下Kafka在实际场景中的一些使用心得.本篇博客打算先给大家入个门,让大家对Kafka有个初步的了 ...
- RocketMQ系列实战
RocketMQ实战(一)RocketMQ实战(二)RocketMQ实战(三):分布式事务RocketMQ实战(四)
- Hibernate学习(四)———— 双向多对多映射关系
一.小疑问的解答 问题一:到这里,有很多学习者会感到困惑,因为他不知道使用hibernate是不是需要自己去创建表,还是hibernate全自动,如果需要自己创建表,那么主外键这种设置也是自己设置吗? ...
- server下apache2.4.*虚拟主机配置Forbidden You don't have permission to access / on this server.
前言: 继前面两节笔记之后,在配置一个虚拟主机时,这中间却遇见了一个问题,这里需要描述做一下笔记,刚刚安装的是Ubuntu server,apt-get下来的apache的版本是2.4.7,之前一直用 ...
- C#添加IIS站点
利用IIS7自带类库管理IIS现在变的更强大更方便,而完全可以不需要用DirecotryEntry这个类了(乐博网中很多.net管理iis6.0的文章都用到了DirecotryEntry这个类 ),M ...
- vb.net 變量及数据类型
Dim过程级变量 Private模块级变量 Public全局变量 Integer(整型) Long(长整型) Single(單精度浮點型) Double(双精度浮点型) Decimal(十进制型) S ...
- java Future用法和意义一句话击破
在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果. 所以run的返回值是void类型. 如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使 ...
- cordova启动页面和图标的设置
一.config.xml配置 在cordova5.0版本以后,需要安装cordova-plugin-splashscreen插件以后才能修改和设置App的启动页面. 安装splashscreen插件: ...
- 解说css中的margin属性缩写方式
<html> <body> <div style="border: 1px solid red;"> <div style="b ...