当前位置: 首页 > news >正文

QString与QByteArray互相转换的方法

QString与QByteArray互相转换的方法

  • [1] QString与QByteArray互相转换的方法
    • QString转QByteArray方法
    • QByteArray转QString方法
    • QByteArray类同样不以’\0’为结尾
    • QByteArray转QString,主要用buf.toHex()即可
  • [2] Qt开发串口通讯软件中的数据转换问题
    • 1.读取串口命令-QByteArray转QString,QString转float
    • 2.向串口写入命令
  • [3] QT QString与QByteArray的相互转换


[1] QString与QByteArray互相转换的方法

https://blog.csdn.net/qq_16093323/article/details/79556807

先要说的是QString。

之所以把QString单独拿出来,是因为string是很常用的一个数据结构,甚至在很多语言中,比如JavaScript,都是把string作为一种同int等一样的基本数据结构来实现的。

每一个GUI程序都需要string,这些string可以用在界面上的提示语,也可以用作一般的数据结构。C++语言提供了两种字符串的实现:C风格的 字符串,以’/0‘结尾;std::string,即标准模版库中的类。Qt则提供了自己的字符串实现:QString。QString以16位 Uniode进行编码。我们平常用的ASCII等一些编码集都作为Unicode编码的子集提供。关于编码的问题,我们会到以后的时候再详细说明。

在使用QString的时候,我们不需要担心内存分配以及关于’/0’结尾的这些注意事项。QString会把这些问题解决。通常,你可以把 QString看作是一个QChar的向量。另外,与C风格的字符串不同,QString中间是可以包含’/0’符号的,而length()函数则会返回 整个字符串的长度,而不仅仅是从开始到’/0’的长度。

同Java的String类类似,QString也重载的+和+=运算符。这两个运算符可以把两个字符串连接到一起,正像Java里面的操作一样。QString可以自动的对占用内存空间进行扩充,这种连接操作是恨迅速的。下面是这两个操作符的使用:

QStringstr="User:";
str+=userName+"/n";

QString的append()函数则提供了类似的操作,例如:

str="User:";
str.append(userName);
str.append("/n");

QString转QByteArray方法

//Qt5.3.2
QString str("hello");  
QByteArray bytes = str.toUtf8(); // QString转QByteArray方法1 QString str("hello");  
QByteArray bytes = str.toLatin1();  // QString转QByteArray方法2

QByteArray转QString方法

//Qt5.3.2QByteArray bytes("hello world");QString string = bytes;   // QByteArray转QString方法1QByteArray bytes("hello world");QString string;string.prepend(bytes);// QByteArray转QString方法2qDebug() << string;

QByteArray类同样不以’\0’为结尾

QByteArray bytes;  
bytes.resize(5);  
bytes[0] = '1';  
bytes[1] = '2';  
bytes[2] = '3';  
bytes[3] = '\0';  
bytes[4] = 'a';  cout << bytes << endl;  

QByteArray转QString,主要用buf.toHex()即可

    static QString ByteArrayToHexStr(QByteArray buf){QString retStr;retStr.append(buf.toHex());return retStr;}

[2] Qt开发串口通讯软件中的数据转换问题

原文链接:https://blog.csdn.net/Dasis/article/details/125933823

在利用Qt进行串口程序开发过程中,除了与串口通讯的功能实现以外,数据的转换也是比较麻烦的一件事,本篇主要介绍串口通讯中数据转换的问题,关于功能实现大家在网上搜索就能找到相关案例。

在完成串口的初始化等功能之后,实现数据的读取转换。

1.读取串口命令-QByteArray转QString,QString转float

从串口接收到的数据形如:“0010101821…”的16进制数,串口返回QByteArray的数据格式,通过以下方式转换为QString,再通过截取数据中某几位,按照16进制格式转换为10进制使用。

QByteArray转QString

   static QString serialBuffer;QByteArray serialBufferTmp=m_serialPort->readAll();serialBuffer=serialBuffer.append(serialBufferTmp);

截取第8位后4位的16进制数,并QString转float

QString strValue=serialBuffer.mid(8,4);
float floatValue=strValue.toInt(nullptr,16)

2.向串口写入命令

十进制int转16进制格式string
通常我们从Qt开发的界面中使用QLineEdit输入的是十进制类型的,而为了串口处理需要将其转换为16进制格式,再通过处理成串口可以解析的格式,例如十进制50转换为16进制的“32”,代码如下:

  int Num=dec2HexInputEdit->text().toInt();QString hexString=QString::number(Num,16)

16进制数加法
此处参考Qt 十六进制的简单应用, 十六进制的加法,它是先将数转换为10进制,相加后再转换为QString

QString hexAri(QString str, int addend)
{bool ok;int dec = str.toUInt(&ok, 16);QString tmp = QString("%1").arg(dec + addend, 5, 16, QLatin1Char('0');return tmp;
}

[3] QT QString与QByteArray的相互转换

https://blog.csdn.net/a18363939205/article/details/120461964

QByteArray(const char *data, int size = -1)							//QByteArray Str("1234")  内存中存储可能就是对应的ASSIC:0x31, 0x32, 0x33, 0x34
QByteArray QByteArray::fromHex(const QByteArray &hexEncoded)		//将字符串的“1234”变为0x11 0x34,原本占用4字节内存,现在变为2字节。0x31, 0x32, 0x33, 0x34 ==> 0x12 0x34
QByteArray QByteArray::toHex() const								//将0x12 0x34 变为 “1234”  原本占用2字节内存,现在变为4字节 0x12 0x34 ==> 0x31, 0x32, 0x33, 0x34
int QByteArray::toInt(bool *ok = Q_NULLPTR, int base = 10) const	//Str.toInt(&Ok, 16)将字符串 “1234”变为int型 0x1234,, 转换的前提:Str内就是存的字符串,Str内存的不是“0”--“9” “a”--“f”,不能转换成功QString(const QByteArray &ba)			//可以将QByteArray转换为字符串,我认为内存占用,以及数据都是一样的,只是类型变了,原来QByteArray表示0x31 0x32 0x33 0x34, 还是同样的数据用QString表示了
QString fromUtf8(const QByteArray &);	//将QByteArray转换为QSting。字符串的编码方式不同,内存占用以及数据就不同,但是都可以看成char[] 数组,在Qt中char 数组就是QByteArray,因此将不同编码方式的字符串转换为QString的函数入参都是QByteArray
QString number( A, B);					//将数字转换为字符串 将A转变为B进制, A=10  B=16  转换为“a” :  10 = 0x0A ; A=10  B=10  转换为“10”
int QString::toInt(bool *ok = Q_NULLPTR, int base = 10) const			//base = 16,将字符串 “12”变为 0x12QByteArray QString::toLatinl() const;		//将QString编码的字符串转换到 其他类型的字符串编码
QByteArray QString::toUtf8() const;			//举例: 字符串“1”,在内存中就是0x31 (ASSIC 0x31表示1),只不过存储方式是QString的编码,假如Utf8与QString的编码一样,转换出来后,还是0x31
QByteArray QString::toLocal8Bit() const;	//假如 Local8Bit中 “1” 用16进制0x88表示,  那么转换后,内存的数成了0x88,
QByteArray QString;:toUCS4() const;Latin1:SO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF
utf8字符集以2个或以上的字节表示一个汉字,实际上具体的数值和unicode有很大的相关性
unicode字符集以2个或以上的字节表示一个汉字。
gb18030字符集兼容了gbk字符集,以两个字节表示一个文字。windows系统可能使用的就是这两种的一种。
UCS:通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。UCS-2用两个字节编码,UCS-44个字节编码。

相关文章:

QString与QByteArray互相转换的方法

QString与QByteArray互相转换的方法 [1] QString与QByteArray互相转换的方法QString转QByteArray方法QByteArray转QString方法QByteArray类同样不以’\0’为结尾QByteArray转QString&#xff0c;主要用buf.toHex()即可 [2] Qt开发串口通讯软件中的数据转换问题1.读取串口命令-Q…...

Springboot +Flowable,设置流程变量的方式(一)

一.简介 为什么需要流程变量。 举个例子&#xff0c;假设有如下一个流程&#xff0c;截图如下&#xff1a; 这是一个请假流程&#xff0c;那么谁请假、请几天、起始时间、请假理由等等&#xff0c;这些都需要说明&#xff0c;不然领导审批的依据是啥&#xff1f;那么如何传递…...

机器学习13(正则化)

文章目录 简介正则化经验风险和结构风险过拟合正则化建模策略 逻辑回归逻辑回归评估器 练习评估器训练与过拟合实验评估器的手动调参 简介 这一节详细探讨关于正则化的相关内容&#xff0c;并就 sklearn 中逻辑回归&#xff08;评估器&#xff09;的参数进行详细解释由于 skle…...

并发编程学习(十一):原子数组、

1、数组类型的原子类 原子数组类型&#xff0c;这个其实和AtomicInteger等类似&#xff0c;只不过在修改时需要指明数组下标。 CAS是按照来根据地址进行比较。数组比较地址&#xff0c;肯定是不行的&#xff0c;只能比较下标元素。而比较下标元素&#xff0c;就和元素的…...

递归到动态规划:省去枚举行为

如果在动态规划的过程中没有枚举行为&#xff0c;那严格位置依赖和傻缓存的方式并没有太大区别&#xff0c;但是当有枚举行为的时候&#xff08;一个位置依赖于多个位置&#xff09;&#xff0c;那严格位置依赖是有优化空间的&#xff0c;枚举行为也许可以省去&#xff0c;题目…...

服务(第二十一篇)mysql高级查询语句(二)

①视图表&#xff1a; 视图表是虚拟表&#xff0c;用来存储SQL语句的定义 如果视图表和原表的字段相同&#xff0c;是可以进行数据修改的&#xff1b; 如果两者的字段不通&#xff0c;不可以修改数据。 语法&#xff1a; 创建&#xff1a;create view 试图表名 as ... 查…...

MYSQL高可用配置(MHA)

1、什么是MHA MHA&#xff08;Master High Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大…...

单精度浮点数与十进制数据相互转换

一、float基础&#xff1a; Float类型占4个字节,也就是32bit,其中最高位是符号位,2~9位是指数位,后边的23bit是数值位.如下所示 大部分数据的二进制形式都可以用科学计数法表示,即1.m*2^n这种形式,只要知道m和n,就能确定一个数值 二、小数位如何转变为二进制&#xff1a; 下面…...

PMP敏捷-4大价值观、12原则

宣言及4大价值观 个体及互动 胜于 流程和工具 以人为本 工作的软件 胜于 完整的文档 以价值为导向 客户合作 胜于 合同谈判 合作共赢 应对变更 胜于 遵循计划 拥抱变化 12原则 工作原则&#xff1a;精益、至简&#xff0c;实现这种原则的方式是“定期反省”。9、10、12 …...

K8S—Helm

一、Helm介绍 helm通过打包的方式&#xff0c;支持发布的版本管理和控制&#xff0c;很大程度上简化了Kubernetes应用的部署和管理。 Helm本质就是让k8s的应用管理&#xff08;Deployment、Service等&#xff09;可配置&#xff0c;能动态生成。通过动态生成K8S资源清单文件&a…...

ALSA内部函数调用流程

ALSA内部函数调用流程 一直都有这样的一个疑问 就是在linux系统中我们调用snd_pcm_open后&#xff0c;就不知道alsa内部是怎么运行的了 用户的pcm_open()相当于先对ASoC各个驱动模块startup()&#xff0c;再做hw_params()。 pcm_open()pcm->fd open("/dev/snd/pcm…...

Python正则表达式详解,保姆式教学,0基础也能掌握正则

正则作为处理字符串的一个实用工具&#xff0c;在Python中经常会用到&#xff0c;比如爬虫爬取数据时常用正则来检索字符串等等。正则表达式已经内嵌在Python中&#xff0c;通过导入re模块就可以使用&#xff0c;作为刚学Python的新手大多数都听说”正则“这个术语。 今天来给…...

ChatGPT 接入飞书教程,创建自己的聊天机器人

ChatGPT 接入飞书教程,创建自己的聊天机器人 一、飞书进入开发者平台。点击创建应用。二、打开Aircode,点击创建应用,上面输入名字,下面选择Node.js v16三、配置环境,点击Environments,创建四个变量,全部要大写本教程收集于: AIGC从入门到精通教程 首先,准备三个账号…...

JS生成随机数(多种解决方案)

JS生成随机数 概述 随机数是编程语言中的重要组成部分。在JavaScript中&#xff0c;生成随机数是一项简单的任务。本文将介绍生成随机数的各种方法。 Math.random() Math.random()是JavaScript中生成随机数最常见的方法。该方法返回介于0和1之间的随机数。例如&#xff0c;…...

文件IO 函数 静态库和动态库的创建 5.11

5.11 文件IO函数 1.数据读写 ssize_t read(int fd,void *buf,size_t count); 功能&#xff1a; ​ 从fd对应的文件中 读取前count个字节的数据到buf缓冲区中 头文件&#xff1a; ​ #include <unistd.h> 参数&#xff1a; ​ fd &#xff1a;文件描述符 ​ buf…...

考研日语-详解ている、てある、ていく、てくる用法

目录 一、ている用法 1. 表示现在状态 2. 表示持续动作 3. 表示经验或习惯 4. 表示结果或效果 二、てある用法 1. 表示已经完成的动作 2. 表示现在状态 3. 表示被动 三、ていく用法 1. 表示未来的动作 2. 表示逐渐变化的过程 四、てくる用法 1. 表示过去到现在的…...

Spring Security 6.x 系列【36】授权服务器篇之OpenID Connect 1.0

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 本系列Spring Authorization Server 版本 1.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 前言2. OpenID Connect…...

【计算机视觉 | Pytorch】timm 包的具体介绍和图像分类案例(含源代码)

一、具体介绍 timm 是一个 PyTorch 原生实现的计算机视觉模型库。它提供了预训练模型和各种网络组件&#xff0c;可以用于各种计算机视觉任务&#xff0c;例如图像分类、物体检测、语义分割等等。 timm 的特点如下&#xff1a; PyTorch 原生实现&#xff1a;timm 的实现方式…...

轻博客Plume的搭建

什么是 Plume &#xff1f; Plume 是一个基于 ActivityPub 的联合博客引擎。它是用 Rust 编写的&#xff0c;带有 Rocket 框架&#xff0c;以及 Diesel 与数据库交互。前端使用 Ructe模板、WASM 和SCSS。 反向代理 假设我们实际访问地址为&#xff1a; https://plume.laosu.ml…...

机器人关节电机PWM

脉冲宽度调制(Pulse width modulation,PWM)技术。一种模拟控制方式 机器人关节电机的控制通常使用PWM(脉冲宽度调制)技术。PWM是一种用于控制电子设备的技术,通过控制高电平和低电平之间的时间比例,实现对电子设备的控制。在机器人关节电机中,PWM信号可以控制电机的…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

电脑定时关机工具推荐

软件介绍 本文介绍一款轻量级的电脑自动关机工具&#xff0c;无需安装&#xff0c;使用简单&#xff0c;可满足定时关机需求。 工具简介 这款关机助手是一款无需安装的小型软件&#xff0c;文件体积仅60KB&#xff0c;下载后可直接运行&#xff0c;无需复杂配置。 使用…...

uni-app学习笔记三十--request网络请求传参

request用于发起网络请求。 OBJECT 参数说明 参数名类型必填默认值说明平台差异说明urlString是开发者服务器接口地址dataObject/String/ArrayBuffer否请求的参数App 3.3.7 以下不支持 ArrayBuffer 类型headerObject否设置请求的 header&#xff0c;header 中不能设置 Refere…...

【Flask】:轻量级Python Web框架详解

什么是Flask&#xff1f; Flask是一个用Python编写的轻量级Web应用框架。它被称为"微框架"(microframework)&#xff0c;因为它核心简单但可扩展性强&#xff0c;不强制使用特定的项目结构或库。Flask由Armin Ronacher开发&#xff0c;基于Werkzeug WSGI工具包和Jin…...