QT 中 QString 转换为 Unicode 和 ASCII 的方法

目录

​编辑

前言

一、QString转换成 Unicode编码

二、QString转换成ASCII编码

三、Unicode编码转换成QString汉字

四、ASCII编码转成QString

五、注意事项

六、总结


 

前言

        在 Qt 开发中,经常会遇到需要将QString中的字符转换为特定编码格式的需求。本文将介绍如何将QT 中 QString 转换为 Unicode 和 ASCII 的方法。

一、QString转换成 Unicode编码

        QString内部采用 UTF-16 编码存储文本,而 UTF-16 编码下,一个汉字通常由两个字节来表示其 Unicode 编码。以下是一个示例代码:

#include <QCoreApplication>
#include <QDebug>int main(int argc, char *argv[])
{unsigned short dataArry[64];QCoreApplication a(argc, argv);QString chineseStr = "测试";  // 以单个汉字为例for(int a=0;a<siteName.chineseStr ();a++){dataArry[a] = chineseStr.at(a).unicode();  // 获取该汉字对应的 Unicode 编码值}return 1;
}

        

        在上述代码中,首先创建了一个包含汉字的QString对象和一个unsigned short类型的数组,然后通过at方法获取字符串中的第一个字符,并将其存储到QChar类型的变量中。接着通过ch.unicode()获取该汉字对应的 Unicode 编码值赋值给dataArry数组。 

二、QString转换成ASCII编码

如果QString中的字符都是 ASCII 范围内的字符,可以通过循环遍历QString中的每个字符,将其转换为char类型,然后拼接成一个 ASCII 字符串。示例代码如下:

   #include <QCoreApplication>#include <QDebug>int main(int argc, char *argv[]){QCoreApplication a(argc, argv);QString str = "Hello";std::string asciiStr;for (int i = 0; i < str.length(); ++i) {QChar ch = str.at(i);if (ch.unicode() <= 127) {asciiStr += static_cast<char>(ch.unicode());}}qDebug() << QString::fromStdString(asciiStr);return a.exec();}

        在上述代码中,遍历QString的每个字符,检查其 Unicode 码点是否在 ASCII 范围内(小于等于 127),如果是,则将其转换为char类型并添加到std::string中,最后使用QString::fromStdStringstd::string转换为QString进行输出。

三、Unicode编码转换成QString汉字

以下是一个简单的示例,假设unsigned short数组中存储了汉字的 UTF - 16 编码数据:

 #include <QCoreApplication>#include <QDebug>int main(int argc, char *argv[]){QCoreApplication a(argc, argv);unsigned short utf16Data[] = {0x4E2D, 0x56FD};  // 汉字“中国”的UTF - 16编码QString chineseStr((QChar*)utf16Data, sizeof(utf16Data)/sizeof(utf16Data[0]));qDebug() << chineseStr;return a.exec();}

        在这个示例中,通过将unsigned short数组强制转换为QChar*类型,然后使用QString的构造函数创建字符串。QChar是 QT 中用于存储 Unicode 字符的数据类型,QString的这个构造函数会根据传入的QChar*指针和长度来正确地构建包含汉字(如果编码正确)的字符串。

 

四、ASCII编码转成QString

        如果有一个unsigned char数组表示的 ASCII 编码,可以通过循环遍历数组,将每个元素转换为QChar并拼接成QString。示例如下:

   #include <QCoreApplication>#include <QDebug>int main(int argc, char *argv[]){QCoreApplication a(argc, argv);unsigned char asciiCharArray[] = {'H', 'e', 'l', 'l', 'o'};QString result;for (size_t i = 0; i < sizeof(asciiCharArray); ++i) {result.append(QChar(asciiCharArray[i]));}qDebug() << result;return a.exec();}

        这里遍历unsigned char数组,将每个元素作为 ASCII 码值转换为QChar,然后使用QString的append方法将这些字符逐个添加到结果QString中。

五、注意事项

  • 字节序问题:如果涉及到跨平台或者数据传输等情况,需要考虑字节序的影响。不同的平台可能采用不同的字节序(大端序或小端序)来存储多字节的数据。例如在网络传输或者文件存储时,要确保接收方和发送方对于字节序的理解是一致的,可能需要进行字节序的转换操作。
  • 编码完整性和正确性:要确保QString中存储的汉字是合法有效的,并且是按照预期的编码方式(这里是 UTF-16)进行存储和处理的。如果QString中的数据来源存在编码错误或者数据损坏等情况,那么获取到的 Unicode 编码值可能就不准确,进而影响后续基于这些编码值的操作。
  • Unicode编码和ASCLL编码区别:一般Unicode编码占两个字节,ASCLL编码只占一个字节,在只有字母情况下,Unicode编码和ASCLL编码数值相同,只不过占的字节不同。

六、总结

        在 Qt 开发中,将QString转换为不同编码格式的需求是很常见的。通过了解QString的内部编码方式以及QChar等相关数据类型的使用方法,可以方便地实现将QString转换为 Unicode 和 ASCII 的操作。同时,在进行这些转换时,需要注意字节序、编码完整性等问题,以确保转换结果的准确性和可靠性。

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

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

相关文章

基于51单片机64位病床呼叫系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机病床呼叫系统设计( proteus仿真程序设计报告原理图讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0095 1. 主要功能&#xff1a; 基于51单片机的病床呼叫系统proteus仿…

【OpenDRIVE_Python】使用python脚本更新OpenDRIVE数据中路口Junction名称

示例代码说明&#xff1a; 遍历OpenDRIVE数据中每个路口JunctionID,读取需要变更的路口ID和路口名称的TXT文件,若JunctionID与TXT文件中的ID一致&#xff0c;则将TXT对应的点位名称更新到OpenDRIVE数据中Junction name字段。补充&#xff1a;需要保持TXT和OpenDRIVE数据文件编…

java+ssm+mysql商品管理系统

项目介绍&#xff1a; 使用javassmmysql开发的商品库存管理系统&#xff0c;系统包含管理员&#xff0c;员工角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;员工管理&#xff1b;供应商管理&#xff1b;客户管理&#xff1b;商品管理&#xff1b;商品进货&#xf…

android studio创建虚拟机注意事项

emulator 启动模拟器的时候&#xff0c;可以用 AVD 界面&#xff0c;也可以用命令行启动&#xff0c;但命令行启 动的时候要注意&#xff0c;系统有两个 emulator.exe &#xff0c;建议使用 emulator 目录下的那个&#xff01;&#xff01; 创建类型为google APIs的虚拟机可从…

小皮面板(PHPSTUDY)配置多个域名或IP

问题描述 小皮面板默认采用nginx的静态部署&#xff0c;按照使用nginx的习惯只需要额外添加一个server即可&#xff0c;但是会发现直接往配置文件里添加新的server是不生效的&#xff0c;小皮的官网论坛几乎已经停止维护&#xff0c;因此资料较少&#xff0c;原本也没有仔细使…

搭建voiceapi实时语音转录/合成github项目教程【windows版】

github项目地址&#xff1a;https://github.com/ruzhila/voiceapi 项目简介&#xff1a;python实现的基于sherpa-onnx的语音转录/合成API 运行环境&#xff1a;windows、python3.10 1.下载项目 git clone https://github.com/ruzhila/voiceapi.git2.新建环境 注意使用python …

网络编程 | TCP套接字通信及编程实现经验教程

1、TCP基础铺垫 TCP/IP协议簇中包含了如TCP、UDP、IP、ICMP、ARP、HTTP等通信协议。TCP协议是TCP/IP协议簇中最为常见且重要的通信方式之一&#xff0c;它为互联网上的数据传输提供了可靠性和连接管理。 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议…

java+ssm+mysql成绩统计分析管理系统

项目介绍&#xff1a; 使用javassmmysql开发的成绩统计分析管理系统&#xff0c;系统包含管理员&#xff0c;教师&#xff0c;学生角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;首页统计&#xff1b;班级管理&#xff1b;课程管理&#xff1b;学生管理&#xff1…

大模型 LMDeploy 量化部署

1 模型部署 定义&#xff1a; 在软件工程中&#xff0c;部署通常指的是将开发完毕的软件投入使用的过程。在人工智能领域&#xff0c;模型部署是实现深度学习算法落地应用的关键步骤。简单来说&#xff0c;模型部署就是将训练好的深度学习模型在特定环境中运行的过程。 场景…

AI赋能:构建安全可信的智能电子档案库

在档案的政策与法规上&#xff0c;《中华人民共和国档案法》2020年修订新增&#xff0c;对电子档案的合法要件、地位和作用、安全管理要求和信息化系统建设等方面作出了明确规定&#xff0c;保障数字资源的安全保存和有效利用。 日前&#xff0c;国家档案局令第22号公布《电子…

C++入门项目:Linux下C++轻量级Web服务器 项目详解(小白篇)

拿到一个项目首先先跑通&#xff0c;然后再慢慢来看代码&#xff0c;关于怎么将这个项目跑通&#xff0c;上一篇已经讲过&#xff0c;感兴趣的小伙伴可以移步下面的链接&#xff0c;或者其他博主的教程。 C入门项目&#xff1a;Linux下C轻量级Web服务器 跑通|运行|测试&#xf…

【Linux】开机进入grub/怎么办?

开机进入grub/怎么办&#xff1f; 1、利用ls命令查看磁盘 ls执行后提示&#xff1a; &#xff08;hd0&#xff09;&#xff08;hd0,msdo1&#xff09;&#xff08;hd0,msdo3&#xff09;&#xff08;hd0,msdo5&#xff09;(lvm-cd****-Home)(lvm-cd****-Root)2、利用cat查看f…

Java版-图论-拓扑排序与有向无环图

拓扑排序 拓扑排序说明 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列…

前沿重器[56] | google search: 用emb模型做个性化语言prompt

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

【adb】iqoo系统精简垃圾内置应用

免责声明 这个得谨慎点&#xff0c;虽然我验证过两部手机和不同版本的系统&#xff0c;但是总会有特殊的存在、 本教程来自于互联网搜集整理&#xff0c; 按照本教程造成的用户设备硬件或数据损失&#xff0c;本人概不承担任何责任&#xff0c;如您不同意此协议&#xff0c;请不…

用最小的代价解决mybatis-plus关于批量保存的性能问题

1.问题说明 问题背景说明&#xff0c;在使用达梦数据库时&#xff0c;mybatis-plus的serviceImpl.saveBatch()方法或者updateBatchById()方法的时候&#xff0c;随着数据量、属性字段的增加&#xff0c;效率越发明显的慢。 serviceImpl.saveBatch(); serviceImpl.updateBatch…

使用 EasyExcel 提升 Excel 处理效率

目录 前言1. EasyExcel 的优点2. EasyExcel 的功能3. 在项目中使用 EasyExcel3.1 引入依赖3.2 实体类的定义与注解3.3 工具类方法的实现3.4 在 Controller 中使用 4. 总结5. 参考地址 前言 在日常开发中&#xff0c;Excel 文件的处理是不可避免的一项任务&#xff0c;特别是在…

Linux上的C语言编程实践

说明&#xff1a; 这是个人对该在Linux平台上的C语言学习网站笨办法学C上的每一个练习章节附加题的解析和回答 ex1: 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后运行它看看发生了什么。 vim ex1.c打开 ex1.c 文件。假如我们删除 return 0…

Elasticsearch vs 向量数据库:寻找最佳混合检索方案

图片来自Shutterstock上的Bakhtiar Zein 多年来&#xff0c;以Elasticsearch为代表的基于全文检索的搜索方案&#xff0c;一直是搜索和推荐引擎等信息检索系统的默认选择。但传统的全文搜索只能提供基于关键字匹配的精确结果&#xff0c;例如找到包含特殊名词“Python3.9”的文…

SpringCloudAlibaba学习路线:全面掌握微服务核心组件

大家好&#xff0c;我是袁庭新。 星友给我留言说&#xff1a;“新哥&#xff0c;我最近准备开始学Spring Cloud Alibaba技术栈&#xff0c;计划冲刺明年的春招&#xff0c;想全面掌握微服务核心组件。但不知从何学起&#xff0c;没有一个有效的学习路线&#xff0c;我需要学习…