字符串转换const char* , char*,QByteArray,QString,string相互转换,支持中文

文章目录

  • 1.char * 与 const char * 的转换
  • 2.QByteArray 与 char* 的转换
  • 3.QString 与 QByteArray 的转换
  • 4.QString 与 string 的转换
  • 5.QString与const string 的转换
  • 6.QString 与 char* 的转换

在开发中,经常会遇到需要将数据类型进行转换的情况,下面依次给出const char* , char*,QByteArray,QString,string相互转换的方法。支持中文。
转换图示如下:
类型转换图

1.char * 与 const char * 的转换

	char* ch11 = "中国";const char* ch12 = "人民";ch12 = ch11;ch11 = (char*)ch12;std::string str13 = ch12;//char* 转string

2.QByteArray 与 char* 的转换

	char* ch31;QByteArray byte32("中国");ch31 = byte32.data();//QByteArray -> char*QByteArray byte33 = QByteArray(ch31);//char* -> QByteArray 

3.QString 与 QByteArray 的转换

	QByteArray byte41("中国");QString str42 = QString::fromLocal8Bit("人民");byte41 = str42.toLocal8Bit();//QString -> QByteArrayQTextCodec *codec = QTextCodec::codecForName("GBK");QString str43 =codec->toUnicode(byte41);//QByteArray -> QString

4.QString 与 string 的转换

	QString str51 = QString::fromLocal8Bit("中国");std::string	str52 = str51.toLocal8Bit().data();//QString ->stringQTextCodec *codec = QTextCodec::codecForName("GBK");QString str53 =codec->toUnicode(QByteArray((char*)(str52.c_str()))) ;//string -> QString

5.QString与const string 的转换

	const std::string str61= "china";std::string	str62 = (std::string)str61;

6.QString 与 char* 的转换

	QString str71 = QString::fromLocal8Bit("中国");char* ch72 = str71.toLocal8Bit().data();//QString -> char*char * ch73 = "中国";QByteArray byte74(ch73);//QTextCodec *codec = QTextCodec::codecForName("GBK");//QString str75 = byteArrayToUnicode(byte74);QString str75 = codec->toUnicode(byte74);//char* -> QByteArray//字符转换函数
QString byteArrayToUnicode(const QByteArray array)
{// state用于保存转换状态,它的成员invalidChars,可用来判断是否转换成功// 如果转换成功,则值为0,如果值大于0,则说明转换失败QTextCodec::ConverterState state;// 先尝试使用utf-8的方式把QByteArray转换成QStringQString text = QTextCodec::codecForName("UTF-8")->toUnicode(array.constData(), array.size(), &state);// 如果转换时无效字符数量大于0,说明编码格式不对if (state.invalidChars > 0){// 再尝试使用GBK的方式进行转换,一般就能转换正确(当然也可能是其它格式,但比较少见了)text = QTextCodec::codecForName("GBK")->toUnicode(array);}return text;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/658696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]

阅读导航 引言一、设计模式概念(了解)二、单例模式1. 饿汉模式(1)概念(2)模拟实现(3)优缺点(4)适用场景 2. 懒汉模式(1)概念&#xff…

金田金业教你如何看懂国际黄金价格走势图

对于黄金投资者来说,看懂国际黄金价格走势图是至关重要的。通过观察走势图,可以了解金价的实时动态,预测未来的走势,从而做出相应的投资决策。本文将详细解析如何看懂国际黄金价格走势图。 一、国际黄金价格走势图的基本构成 国…

【JavaEE】UDP协议与TCP协议

作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…

NoSQL数据库简介

NoSQL数据库简介 Brief Introduction to NoSQL Databases By JacksonML 1. 什么是SQL? 在了解NoSQL之前,先简要介绍一下SQL。 SQL是 Structured Query Language(结构化查询语言)的缩写。 SQL在关系型数据中广泛使用&#xf…

大数据学习之Redis,十大数据类型的具体应用(三)

目录 3.7 Redis位图(bitmap) 概念 需求 是什么 说明 能干嘛? 基本命令 3.7 Redis位图(bitmap) 概念 由0和1状态表现的二进制位的bit数组 需求 用户是否登陆过?Y / N 广告是否被点击过? 钉钉打…

深入理解G0和G1指令:C++中的实现与激光雕刻应用

系列文章 ⭐深入理解G0和G1指令:C中的实现与激光雕刻应用⭐基于二值化图像转GCode的单向扫描实现⭐基于二值化图像转GCode的双向扫描实现⭐基于二值化图像转GCode的斜向扫描实现基于二值化图像转GCode的螺旋扫描实现基于OpenCV灰度图像转GCode的单向扫描实现基于Op…

RK3568平台 热插拔机制

一.热插拔的基本概念 热插拔是指在设备运行的情况下,能够安全地插入或拔出硬件设备,而无需关闭或重启系统。这意味着你可以在计算机或其他电子设备上插入或拔出硬件组件(比如USB设备,扩展卡,硬件驱动器等)…

计算机网络-调度算法-2(时间片轮转 优先级调度算法 多级反馈队列调度算法 多级队列调度算法)

文章目录 总览时间片轮转时间片大小为2时间片大小为5若按照先来先服务算法 优先级调度算法例题( 非抢占式优先级调度算法)例题( 抢占式优先级调度算法)补充 思考多级反馈队列调度算法例题 小结多级队列调度算法 总览 时间片轮转 …

设计模式学习笔记02(小滴课堂)

江湖传言里的设计模式-单例设计模式 单例设计模式中的懒汉方式实战 这种方式是线程不安全的,多个线程同时调用会创建多个对象。 所以我们就要给它加锁: 我们去测试一下: 因为构造函数已经私有化,所以不能直接用new的方式去创建对象。 现在我…

springboot本地测试

文章目录 本地测试引入依赖进入StudentMapper右键点击生成 项目结构 本地测试 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope> </d…

笔记本从零安装ubuntu系统+多种方式远程控制

文章目录 前言ubuntu启动盘Windows远程Ubuntu安装XrdpXrdp卡顿问题解决Xrdp 二次登录会死机的问题Xrdp 卡顿问题 MobaXtermRustDesk 外网远程VNC 远程SSH远程其它设置 总结 前言 我有台老笔记本&#xff0c;上大学第一年的时候买的&#xff0c;现在已经不怎么好用了。打算刷个…

初谈C++:引用

文章目录 前言概述引用特性应用场景做参数做返回值 传值、传引用效率比较引用和指针的区别 前言 在学习C语言的时候会遇到指针&#xff0c;会有一级指针、二级指针…很容易让人头昏脑胀。在C里面&#xff0c;引入了引用的概念&#xff0c;会减少对指针的使用。引用相当于给一个…

日历功能——C语言

实现日历功能&#xff0c;输入年份月份&#xff0c;输出日历 #include<stdio.h>int leap_year(int year) {if(year % 4 0 && year % 100 ! 0 || year % 400 0){return 1;}else{return 0;} }int determine_year_month_day(int *day,int month,int year) {if(mo…

ECharts 图表嵌入表格样式的demo

心累。。。 如果条件允许&#xff0c;还是强烈建议 用 Echartshtml 来实现&#xff08;表格部分由 html 来弄&#xff09;。 这里是调研阶段&#xff0c;想看看 ECharts 原生能做到什么程度。 先贴上样图&#xff1a; 贴上完整代码&#xff1a; <!DOCTYPE html> <…

SQL注入攻击 - 基于布尔的盲注

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 查看靶场详情:SQL Injections 一、判定是否有注入点 以下是一个常见的步骤: 在URL中尝试输入特殊字符,如: " \ -- 等,并观察页面返回的内容。在URL中尝试输入错误的…

MySQL:MVCC原理详解

MySQL是允许多用户同时操作数据库的&#xff0c;那么就会出现多个事务的并发场景。那么再并发场景会出现很多问题&#xff1a;脏读、不可重复读、幻读的问题。 而解决这些问题所用到的方法就是&#xff1a;MVCC 多版本并发控制。而这个MVCC的实现是基于read_view、undoLog 如…

【Linux驱动】块设备驱动(一)—— 注册块设备

针对块设备驱动将分为两部分介绍&#xff0c;第一部分是注册块设备&#xff0c;即将块设备成功添加到内核&#xff1b;第二部分是介绍如何读写块设备&#xff0c;因为没有实际块设备&#xff0c;这里选择使用内存来模拟块设备。 一、认识块设备 1、什么是块设备 块设备针对的…

浏览器内存泄漏排查指南

1、setTimeout执行原理 使用setInterval/setTimeOut遇到的坑 - 掘金 2、Chrome自带的Performance工具 当我们怀疑页面发生了内存泄漏的时候&#xff0c;可以先用Performance录制一段时间内页面的内存变化。 点击开始录制执行可能引起内存泄漏的操作点击停止录制 如果录制结束…

【Java基础】之进程与线程

进程与线程 1. 线程与进程1.1 概念1.2 区别与联系 2. 线程的5种状态和切换2.1 简单介绍2.2 状态切换2.2.1 重点情况 3. 线程中常见的方法4. 线程池 1. 线程与进程 1.1 概念 进程&#xff1a;资源分配的基本单元&#xff0c;如QQ音乐 线程&#xff1a;资源调度的基本单元&…

关于美图秀秀如何给证件照快速抠图换背景操作

日常生活中一些经常处理的小技巧&#xff0c;记录以备以后使用&#xff0c;也方便别人&#xff0c;希望能帮到大家。 1、先导入一张相片&#xff0c;点击AI人像抠图&#xff1b; 2、再点应用当前效果&#xff1b; 3、再点击自动抠图或手动抠图或形状抠图;就可以点击换背景 4、…