QT字节数组类QByteArray

QT字节数组类QByteArray

  • 初始化
  • 访问某个元素
  • 截取字符串
  • 获取字节数组的大小
  • 数据转换与处理
    • Hex转换
    • 数值转换与输出
  • 字母大小写转换
  • 字符串数值转化为各类数值
  • QBQyteArray和char*互转
  • QByteArray 和std::string互转
  • 与字符串QString互转
  • QByteArray和自定义结构体之间的转化
  • 判断是否为空
  • 向前搜索向后搜索
  • 插入

初始化

#include "myqbytearray.h"
#include "ui_myqbytearray.h"
#include "QDebug"
#include "QtGlobal"MyQByteArray::MyQByteArray(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray)
{ui->setupUi(this);qDebug()<<"字节数组类的初始化";QByteArray ba("hello");if('\0'==ba[5]){printf("ba[5]=\'\\0\'\n");}QByteArray ba2("china");ba2.fill('q');qDebug()<<ba2;if('\0'==ba2[5]){printf("ba2[5]=\'\\0\'\n");}ba2.fill('x',2);qDebug()<<ba2;if('\0'==ba[5]){printf("new : ba2[5]=\'\\0\'\n");}}MyQByteArray::~MyQByteArray()
{delete ui;
}

在这里插入图片描述
字节数组类以 ‘\0’结尾,索引的下标从0开始。
第一次调用fill函数,不指定size参数,按照之前的长度,跟新值
第二次调用fill函数,指定size参数,重新调整字节数组的长度,并更新值
在这里插入图片描述

访问某个元素

访问QByteArray类对象的某个元素有4种方式:

  1. []
  2. at()
  3. data[]
  4. constData[]

其中,[]和data[]可读可写,at()和constData[]只读、

MyQByteArray2::MyQByteArray2(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray2)
{ui->setupUi(this);QByteArray ba1("hello");ba1.resize(10);ba1[0] = 'a';ba1[1] = 'b';ba1[2] = 'c';ba1[3] = 'd';ba1[4] = 'e';ba1[5] = 'f';ba1[6] = 'g';ba1[7] = 'h';ba1[8] = 'i';//ba1[9] = 'j';qDebug()<<ba1;if('\0'==ba1[10]){printf("ba1[10] = \'\\0\'\n");}ba1[1]='a';ba1.data()[2] ='a';qDebug()<<ba1;qDebug()<<ba1.at(1);qDebug()<<ba1.constData()[2];qDebug()<<ba1.constData()[3];}

在这里插入图片描述
在这里插入图片描述

截取字符串

使用函数 left() right() mid()来提取多个字节。

MyQByteArray3::MyQByteArray3(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray3)
{ui->setupUi(this);QByteArray x("pineapple");QByteArray y1 = x.left(4);qDebug()<<y1;QByteArray y2 = x.right(5);qDebug()<<y2;QByteArray y3 = x.mid(2,4);qDebug()<<y3;QByteArray y4 = x.mid(2);qDebug()<<y4;}

在这里插入图片描述
在这里插入图片描述

获取字节数组的大小

成员函数size(),length(),count()来获得字节数组的大小(除了名字不同,这3个函数是相同的)

  1. int size()
  2. int length()
  3. int count()

size()不包括字符串末尾添加的 ‘\0’
如果以字符串形式初始化,中间有‘\0’,则不统计后面的字符。
如果改变中间的字符,为‘\0’,并不会被size()截断

MyQByteArray4::MyQByteArray4(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray4)
{ui->setupUi(this);QByteArray b4("hello");int n1 = b4.size();int n2 = b4.size();int n3 = b4.size();qDebug()<<n1<<"  "<<n2<<"  "<<n3<<"  ";b4.data()[3]='\n';qDebug()<<b4.size();QByteArray b41("he\0llo");qDebug()<<b41.size();
}

在这里插入图片描述
在这里插入图片描述

数据转换与处理

Hex转换

QByteArray::fromHex() 将16进制编码的数据转换为字符类型的数据。
.toHex() 将字节数组中,字符转换为十六进制的数值编码。

MyQByteArray5::MyQByteArray5(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray5)
{ui->setupUi(this);QByteArray text1 = QByteArray::fromHex("517420697320677265617421");qDebug()<<text1.data();QByteArray text2 = text1.toHex();qDebug()<<text2.data();
}

在这里插入图片描述
在这里插入图片描述

数值转换与输出

QByteArray类的公有静态函数number完成十进制到其他进制的转换。
调用静态成员函数

    int n = 63;qDebug()<<QByteArray::number(n);qDebug()<<QByteArray::number(n,16);qDebug()<<QByteArray::number(n,2);qDebug()<<QByteArray::number(n,8);

在这里插入图片描述
QByteArray类的的公有函数setNum()

    qDebug()<<ba;ba.setNum(n,16);qDebug()<<ba;ba.setNum(n,8);qDebug()<<ba;ba.setNum(n,2);qDebug()<<ba;

在这里插入图片描述
QByteArray::number 将小数按指定格式的小数位转换输出。

    QByteArray ba1 = QByteArray::number(12345.6,'E',3);QByteArray ba2 = QByteArray::number(12345.6,'e',3);QByteArray ba3 = QByteArray::number(12345.6,'f',3);QByteArray ba4 = QByteArray::number(12345.6,'g',3);QByteArray ba5 = QByteArray::number(12345.6,'G',3);qDebug()<<ba1;qDebug()<<ba2;qDebug()<<ba3;qDebug()<<ba4;qDebug()<<ba5;

在这里插入图片描述

字母大小写转换

函数toUpper和toLower完成字母大小写转换。

    QByteArray x("hello QT ");qDebug()<<x.toLower();qDebug()<<x.toUpper();

在这里插入图片描述

在这里插入图片描述

字符串数值转化为各类数值

字符数值转化为各类型数值:to函数。

    QByteArray strint("1234");bool ok0;qDebug()<<strint.toInt();qDebug()<<strint.toInt(&ok0,16);qDebug()<<ok0;qDebug()<<strint.toInt(&ok0,8);qDebug()<<ok0;qDebug()<<strint.toInt(&ok0,2);qDebug()<<ok0;  //由于字符串中存在2,3,4等大于2的值,所以不能转化为二进制qDebug()<<"---------";QByteArray strint2("1234.56");qDebug()<<strint2.toInt();qDebug()<<strint2.toFloat();qDebug()<<strint2.toDouble();qDebug()<<"---------";QByteArray str("FF");bool ok2;qDebug()<<str.toInt(&ok2,16);qDebug()<<str.toInt(&ok2,10);  //字符串中存在F,超过了10和8进制的表示范围。qDebug()<<str.toInt(&ok2,8);

在这里插入图片描述

QBQyteArray和char*互转

使用.data()成员函数返回指向字节数组中存储数据的指针。
返回一个指向字节数组的指针,指向第一个字符。

MyQByteArray8::MyQByteArray8(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray8)
{ui->setupUi(this);QByteArray ba("hello world");char* data = ba.data();while(*data){cout<<" "<<*data;data++;}cout<<endl;free(data);
}

在这里插入图片描述

在这里插入图片描述

QByteArray 和std::string互转

QByteArray的类成员函数:toStdString()
QByteArrayd的静态成员函数:fromStdString()

MyQByteArray9::MyQByteArray9(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray9)
{ui->setupUi(this);QByteArray b1("hello");string s2 = b1.toStdString();QByteArray b2 = QByteArray::fromStdString(s2);
}

在这里插入图片描述

与字符串QString互转

MyQByteArray10::MyQByteArray10(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray10)
{ui->setupUi(this);QByteArray arr("hello world! ");QString str = arr;qDebug()<<str;qDebug()<<"------------";QString str2 ("hello");QByteArray ba = str2.toLatin1();qDebug()<<ba;
}

在这里插入图片描述

QByteArray和自定义结构体之间的转化

定义结构体不能再类中。。。。

根据char*数据和结构体之间的映射,实现结构体和QByteArray之间的转化。

array.append((char*)&msg,sizeof(msg));
typedef struct Header{int channel;int type;
}Header;typedef struct Msg{Header header;char content[128];//友元函数 operator<<friend QDebug operator << (QDebug os, Msg msg){os << "(" << " channel:" << msg.header.channel << " type:" << msg.header.type<< " content:" << msg.content << " )";return os;}
}Msg;typedef struct PeerMsg
{PeerMsg(const int &ip,const int &por) {ipv4 = ip;port = por;}int ipv4;int port;//友元函数 operator<<friend QDebug operator << (QDebug os, PeerMsg msg){os << "(" << " ipv4:" << QString::number(msg.ipv4) << " port:" << QString::number(msg.port)<< " )";return os;}
}PeerMsg;void func(){Msg msg;msg.header.channel =1000;msg.header.type=2;strcpy(msg.content,"hello");qDebug()<<msg;PeerMsg peermsg(1921681001,10086);qDebug()<<peermsg;qDebug()<<"struct to QByteArray";QByteArray array;array.append((char*)&msg,sizeof(msg));Msg* pMsg =(Msg*)array.data();                    //将结构体转换为QByteArrayqDebug()<<*pMsg;qDebug()<<"QByteArray to struct";QByteArray totalByte;totalByte.append((char*)&peermsg,sizeof(peermsg));PeerMsg* pPeerMsg =(PeerMsg*)totalByte.data();    //将结构体转换为QByteArrayqDebug()<<*pPeerMsg;}

在这里插入图片描述

在这里插入图片描述

判断是否为空

.isEmpty()

MyQByteArray11::MyQByteArray11(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray11)
{ui->setupUi(this);qDebug()<<QByteArray("").isEmpty();qDebug()<<QByteArray("ss").isEmpty();}

在这里插入图片描述

在这里插入图片描述

向前搜索向后搜索

.indexof() 从前向后
.lastIndexOf 从后向前

    QByteArray x("sticky question");QByteArray y("sti");qDebug()<<x.indexOf(y);qDebug()<<x.indexOf(y,6);qDebug()<<x.indexOf(y,10);qDebug()<<x.indexOf(y,11);

在这里插入图片描述

    qDebug()<<x.lastIndexOf(y);qDebug()<<x.lastIndexOf(y,8);

在这里插入图片描述

插入

    QByteArray ba("Meal");ba.insert(2,"hello");qDebug()<<ba;

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

区块链实验室(11) - PBFT耗时与流量特征

以前面仿真程序为例&#xff0c;分析PBFT的耗时与流量特征。实验如下&#xff0c;100个节点构成1个无标度网络&#xff0c;节点最小度为5&#xff0c;最大度为38. 从每个节点发起1次交易共识。统计每次交易的耗时以及流量。本文所述的流量见前述仿真程序的说明:区块链实验室(3)…

13.4.2 【Linux】sudo

相对于 su 需要了解新切换的使用者密码 &#xff08;常常是需要 root 的密码&#xff09;&#xff0c; sudo 的执行则仅需要自己的密码即可。sudo 可以让你以其他用户的身份执行指令 &#xff08;通常是使用 root 的身份来执行指令&#xff09;&#xff0c;因此并非所有人都能够…

“深入解析Spring Boot:原理、特性与最佳实践“

标题&#xff1a;深入解析Spring Boot&#xff1a;原理、特性与最佳实践 摘要&#xff1a;本文将深入解析Spring Boot的原理、特性和最佳实践&#xff0c;帮助开发工程师更好地理解和使用Spring Boot。文章包括Spring Boot的背景介绍、核心原理、常用特性和最佳实践&#xff0…

AcWing 1210. 连号区间数

输入样例1&#xff1a; 4 3 2 4 1输出样例1&#xff1a; 7输入样例2&#xff1a; 5 3 4 2 5 1输出样例2&#xff1a; 9样例解释 第一个用例中&#xff0c;有 77 个连号区间分别是&#xff1a;[1,1],[1,2],[1,3],[1,4],[2,2],[3,3],[4,4][1,1],[1,2],[1,3],[1,4],[2,2],[3,3…

【七天入门数据库】第五天 MySQL的备份恢复

系列文章传送门&#xff1a; 【七天入门数据库】第一天 MySQL的安装部署 【七天入门数据库】第二天 数据库理论基础 【七天入门数据库】第三天 MySQL的库表操作 【七天入门数据库】第四天 数据操作语言DML 一、日志管理 &#xff08;一&#xff09;日志类型 错误日志&am…

SAP ERP系统 MARA, MARC分别起到什么作用

“MARA"和"MARC” "MARA"和"MARC"是SAP系统中的两个重要的数据表&#xff0c;它们分别用于存储物料主数据和物料的工厂级数据。在SAP ERP系统中&#xff0c;物料主数据是核心数据之一&#xff0c;用于描述和管理公司生产和采购的物料。 MARA 表…

Linux系统知识1—Linux命令基础格式,什么是命令,命令行,ls命令入门,ls命令的参数和选项,-a,-l -h选项的使用及组合使用

一.什么是命令&#xff0c;命令行 &#xff0e;命令行&#xff1a;即 Linux 终端&#xff08; Terminal )&#xff0c;是一种命令提示符页面。以纯"字符"的形式操作系统&#xff0c;可以使用各种字符化命令对系统发出操作指令。 &#xff0e;命令&#xff1a;即 Lin…

redis(9):spring里面使用redis

1 创建一个mave项目 自行创建一个maven项目 2 修改pom.xml <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven…

SpringMVC

文章目录 一.SpringMVC的概念1.1 Spring的概念1.2 MVC和SpringMVC的关系 二.SpringMVC步骤2.1 创建一个springMVC项目2.2 获取参数的功能2.3 输出参数的功能 三.SpringMVC的注解介绍3.1 获取参数3.1.1 获取参数单个参数3.1.2 获取多个参数3.1.3获取对象3.1.4 获取json对象3.1.5…

hqyj—驱动—day3

ioctl控制马达&#xff0c;LED灯&#xff0c;风扇&#xff0c;蜂鸣器运行 LED LED驱动程序&#xff1a; #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/io.h> #include "stm32mp1xx_gpio.h"…

深度学习初探

1.深度学习模型训练过程 1&#xff09;数据&#xff08;数据清洗标注&#xff09; 2&#xff09;模型&#xff08;模型的构建和初始化&#xff09; 3&#xff09;损失&#xff08;前向传播的过程&#xff0c;得到模型的输出和真实标签的差异值&#xff0c;称之为损失&#x…

深度学习常用优化器总结,具详细(SGD,Momentum,AdaGrad,Rmsprop,Adam,Adamw)

学习需要&#xff0c;总结一些常用优化器。 目录 前言SGD&#xff1a;随机梯度下降BGD&#xff1a;批量梯度下降MBGD&#xff1a;小批量梯度下降MomentumAdaGradRMSpropAdam: Adaptive Moment EstimationAdamW参考文章 前言 优化器的本质是使用不同的策略进行参数更新。常用的…

springboot jar分离部署

springboot jar分离部署 注意&#xff1a;spring boot web项目别使用jsp页面&#xff0c;可以使用模板代替&#xff0c;jsp打包时访问页面会报404错误。 1.具体配置如下&#xff1a; <build><plugins><!--更换maven的jar打包插件先前使用的是spring-boot-mav…

【C++】多态

一、多态的概念 多态&#xff0c;顾名思义就是多种状态。 多态概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 举个例子:比如买票这个行为&#xff0c;当普通人买票时&#xff…

【CSS】 vh、rem 和 px 的区别

vh、rem 和 px 都是 CSS 中常见的长度单位&#xff0c;它们有以下区别&#xff1a; px&#xff08;像素&#xff09;是一个绝对单位&#xff0c;表示屏幕上的实际像素点。它的大小不会根据设备或浏览器的设置进行调整&#xff0c;是一个固定值。 rem&#xff08;根元素字体大小…

【PostgreSQL内核学习(八)—— 查询执行(查询执行策略)】

查询执行 查询执行概述查询执行策略可优化语句和数据定义语句四种执行策略策略选择实现Portal执行的过程 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适用的…

Mysql——》缓存池大小innodb_buffer_pool_size

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

基于LoRA微调部署Stable Diffusion【免费试用阿里云】

文章目录 Stable Diffusion介绍环境及资源准备过程注交互式建模&#xff08;PAI-DSW&#xff09;的试用在创建的工作空间中创建实例安装 Diffusers Stable Diffusion介绍 Stable Diffusion 是一种文本到图像的潜在扩散模型&#xff0c;由 Runway 和慕尼黑大学合作构建&#xf…

vue开发环境搭建指南

nodejs下载和安装 从nodejs官网下载nodejs安装版本(愿配置环境变量的可以下载zip版本,解压,添加path环境变量) 在命令行里运行 node -v显示如下版本,则安装成功 10.15.3 #vue-cli3安装 在命令行里运行 npm i -g @vue/cli查看版本号 vue -V显示如下版本,则安装成功 3…

Centos7.9_瀚高数据库企业版6.0.4_为瀚高PG安装PostGis插件_支持geometry类型_矢量地理信息数据---国产瀚高数据库工作笔记004

在给瀚高PG安装PostGis之前需要安装: proj,geos,gdal 1.首先安装依赖,可以一次性安装 yum install -y python-devel perl-ExtUtils-Embed python-devel gcc-c++ openssl-devel readline readline-devel zlib zlib-devel openssl openssl-devel pam pam-devel libxml2 libxml…