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;因此并非所有人都能够…

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…

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…

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

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

【C++】多态

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

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

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

基于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…

微信小程序反编译

PC--微信小程序反编译 小程序反编译工具&#xff1a; 免责声明&#xff1a;不得将小程序反编译源码程序和反编译图片素材挪作商业或盈利用 使用教程地&#xff1a;https://www.kancloud.cn/ludeqi/xcxzs/2607637 最新版下载地址&#xff1a;https://xcx.siqingw.top/xcx.zip 小…

Python Flask构建微信小程序订餐系统 (十二)

🔥 创建切换商品分类状态的JS文件 🔥 ; var food_act_ops={init:function(){this.eventBind();},eventBind:function(){//表示作用域var that = this;$(".wrap_search select[name=status]").change(function(){$(".wrap_search").submit();});$(&qu…

海外网红营销合作指南:详解海外合同与协议要点

随着互联网的发展和社交媒体的普及&#xff0c;海外网红营销成为了品牌推广和营销的重要力量。然而&#xff0c;这种跨国合作需要谨慎考虑&#xff0c;签订合适的合同与协议显得尤为重要&#xff0c;以确保各方权益得到保障并促进合作的顺利进行。本文Nox聚星将详细介绍与海外网…

web前端设计师的主要职责说明(合集)

web前端设计师的主要职责说明1 职责&#xff1a; 1. 根据UI设计师提供的设计图&#xff0c;实现一流的Web界面&#xff0c;优化代码并保持在各浏览器下良好的兼容性; 2. Web前端表现层及与后端交互的架构设计和开发; 3. JavaScript程序模块开发&#xff0c;通用类库、框架编…

STM32 互补PWM 带死区 HAL

1、设置PWM波频率100KHz&#xff0c;占空比50%&#xff0c;死区时间1us 2、 while 循环之前启动PWM HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); //启动TIM1_CH1 PWM输出 HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);//启动TIM1_CH1N PWM输出 3、死区计算 DT_time…

每日一题——判断链表中是否有环

题目 判断给定的链表中是否有环。如果有环则返回true&#xff0c;否则返回false。 数据范围&#xff1a;链表长度 0≤n≤10000&#xff0c;链表中任意节点的值满足 ∣val∣<100000 要求&#xff1a;空间复杂度 O(1)&#xff0c;时间复杂度 O(n) 输入分为两部分&#xff0c…

优维低代码实践:添加构件

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

HCIA静态路由综合实验(eNSP)

实验题目及要求&#xff1a; 1、分析IP地址分配。 主干IP掩码均为30&#xff1b; 环回IP掩码为28&#xff0c;方便汇总掩码27&#xff1b; 然后预留部分IP地址。 如下图&#xff1a; 2、按如上图片要求连接设备&#xff0c;并标记好IP分配信息&#xff0c;便于命令配置时一…

Jenkins环境配置篇-邮件发送

作为持续集成的利器Jenkins已经得到了广泛地应用&#xff0c;仅仅作为一个工具&#xff0c;Jenkins已然有了自己的生态圈&#xff0c;支持其的plugin更是超过1300。在实际中如何使用以及如何更好地使用jenkins&#xff0c;一直是大家在实践并讨论的。本系列文章将会从如何使用j…