QT字节数组类QByteArray

这篇具有很好参考价值的文章主要介绍了QT字节数组类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;
}

QT字节数组类QByteArray,Qt开发,qt,开发语言
字节数组类以 ‘\0’结尾,索引的下标从0开始。
第一次调用fill函数,不指定size参数,按照之前的长度,跟新值
第二次调用fill函数,指定size参数,重新调整字节数组的长度,并更新值
QT字节数组类QByteArray,Qt开发,qt,开发语言

访问某个元素

访问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];


}

QT字节数组类QByteArray,Qt开发,qt,开发语言
QT字节数组类QByteArray,Qt开发,qt,开发语言

截取字符串

使用函数 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;

}

QT字节数组类QByteArray,Qt开发,qt,开发语言
QT字节数组类QByteArray,Qt开发,qt,开发语言

获取字节数组的大小

成员函数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();
}

QT字节数组类QByteArray,Qt开发,qt,开发语言
QT字节数组类QByteArray,Qt开发,qt,开发语言

数据转换与处理

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();
}

QT字节数组类QByteArray,Qt开发,qt,开发语言
QT字节数组类QByteArray,Qt开发,qt,开发语言

数值转换与输出

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

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

QT字节数组类QByteArray,Qt开发,qt,开发语言
QByteArray类的的公有函数setNum()

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

QT字节数组类QByteArray,Qt开发,qt,开发语言
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;

QT字节数组类QByteArray,Qt开发,qt,开发语言

字母大小写转换

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

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

QT字节数组类QByteArray,Qt开发,qt,开发语言

QT字节数组类QByteArray,Qt开发,qt,开发语言

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

字符数值转化为各类型数值: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);

QT字节数组类QByteArray,Qt开发,qt,开发语言

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);
}

QT字节数组类QByteArray,Qt开发,qt,开发语言

QT字节数组类QByteArray,Qt开发,qt,开发语言

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);
}

QT字节数组类QByteArray,Qt开发,qt,开发语言

与字符串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;
}

QT字节数组类QByteArray,Qt开发,qt,开发语言

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();                    //将结构体转换为QByteArray
    qDebug()<<*pMsg;

    qDebug()<<"QByteArray to struct";
    QByteArray totalByte;
    totalByte.append((char*)&peermsg,sizeof(peermsg));
    PeerMsg* pPeerMsg =(PeerMsg*)totalByte.data();    //将结构体转换为QByteArray
    qDebug()<<*pPeerMsg;
    

}

QT字节数组类QByteArray,Qt开发,qt,开发语言

QT字节数组类QByteArray,Qt开发,qt,开发语言

判断是否为空

.isEmpty()

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

}

QT字节数组类QByteArray,Qt开发,qt,开发语言

QT字节数组类QByteArray,Qt开发,qt,开发语言

向前搜索向后搜索

.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);

QT字节数组类QByteArray,Qt开发,qt,开发语言

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

QT字节数组类QByteArray,Qt开发,qt,开发语言

插入

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

QT字节数组类QByteArray,Qt开发,qt,开发语言

QT字节数组类QByteArray,Qt开发,qt,开发语言文章来源地址https://www.toymoban.com/news/detail-604749.html

到了这里,关于QT字节数组类QByteArray的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 战斗背景:做了个串口接收界面,用来接收传输过来的信号。但是光用数字显示太单调,需要用图线显示出来。 战略目标:干掉它。 战术路线:Qt 绘图可以使用 Qt Charts,先了解

    2024年02月11日
    浏览(42)
  • 【VisualStudio】使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月10日
    浏览(67)
  • QT中发送结构体占用字节相关问题

    最近通过上位机发送数据的时候,针对收到的数据突然多出几个bit产生了疑问。用sizeof来看占据的字节大小,发现和实际应该发送的不对。后面查阅了相关资料,理解了这一部分原因,这里做一个记录。 错误想法: 结构体大小8+2+2=12个字节 原因: 计算结构体大小时需要考虑

    2024年02月15日
    浏览(36)
  • 【VisualStudio】基于 Visual Studio 使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月15日
    浏览(57)
  • 【Visual Studio】使用 C++ 语言,配合 Qt,开发了一个串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 我要使用的功能比较简单,主要包含扫描串口、打开串口、发送数据、接收数据、暂停按钮、停止按钮,因此接下里将围绕这几个功能依次更新。 我的工程项目名字叫 “GUI”。

    2024年02月11日
    浏览(61)
  • 【Visual Studio】报错 C2653,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个 Bug 是我做这个工程时遇到的:【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面。 使用 C++ 语言,配合 Qt 开发串口通信界面,在添加 Widget 做

    2024年02月11日
    浏览(44)
  • 【Visual Studio】报错 ASSERT: “i >= 0 && i < size()“,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个 Bug 是我做这个工程时遇到的:【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面。 使用 C++ 语言,配合 Qt 开发串口通信界面,在调试动态绘图

    2024年02月11日
    浏览(45)
  • <QT开发> QT开发工具-之-QT应用程序打包

    <QT开发> QT开发工具-之-QT应用程序打包 笔者为什么会写这篇文章呢?这是因为,笔者使用windows QT开发了一个测试工具。目的是通过TCP/IP测试其它应用程序。首先这个QT程序是笔者自己开发的,所以笔者的电脑当然是可以运行这个QT程序的,但是想要这个QT程序在其它同事的

    2024年02月12日
    浏览(43)
  • 【Qt】Qt 开发环境安装 ( Qt 版本 5.14.2 | Qt 下载 | Qt 安装 )

    Qt 开发环境下载地址 : https://download.qt.io/archive/qt/ 该界面可以下载 Qt 各个版本的开发环境 ; Qt 版本选择 , Qt 的各个大版本都在同步更新 , 如 5.1 , 5.9 , 5.14 , 6.0 等 , 每个版本都有不同的性能和功能 , 每个版本进入后的二级目录的小版本 , 尽量选择最新的版本 ; 如进入 5.14 目录后

    2024年02月14日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包