字节数组(QByteArray)

在Qt中QByteArray可以看做是C语言中 char*的升级版本。我们在使用这种类型的时候可通过这个类的构造函数申请一块动态内存,用于存储我们需要处理的字符串数据。

1.构造函数

// 构造空对象
QByteArray::QByteArray();// 将data中的size个字符进行构造, 得到一个字节数组对象
// 如果 size==-1 函数内部自动计算字符串长度, 计算方式为: strlen(data)
QByteArray::QByteArray(const char *data, int size = -1);// 构造一个长度为size个字节, 并且每个字节值都为ch的字节数组
QByteArray::QByteArray(int size, char ch);
//QByteArray 字节数组的使用
QByteArray array(5, 'A');   //存储5个字符'A'的字节数组
qInfo() << array;
QByteArray name = "yes";
qInfo() << name;

2.数据操作

基本数据操作

const char* str = "hello";
QByteArray name1(str);
qInfo() << "原字符串:" << name1;
//头部追加
name1.push_front("juny, ");
name1.prepend("Hi ");
qInfo() << "头部追加:" << name1;
//尾部追加
name1.push_back(" world");
name1.append("!");
qInfo() << "尾部追加:" << name1;
//指定位置插入
name1.insert(3, "good ");
qInfo() << "3的位置追加:" << name1;
//数据删除
name1.remove(3, 5); //从3的位置删除5个
qInfo() << "3的位置删除5个:" << name1;
//尾部删除
name1.chop(1);
qInfo() << "尾部删除一个:" << name1;
//保留前面,截断后面
name1.truncate(6);
qInfo() << "截断6后面所有字符:" << name1; //包括位置6上的字符

字节数组查找操作

//清空字节数组
name1.clear();
qInfo() << "清空后:" << name1;
//字符查找
name1 = "I'm cat,is very good, and you?";
qInfo() << "m第一次出现的index:" << name1.indexOf('m');   //返回index
qsizetype pos = name1.indexOf('o');
qInfo() << "o第一次出现的位置为:" << pos;
pos = name1.lastIndexOf('o');
qInfo() << "o最后一次出现的位置为:" << pos;//判断name1中是否包含一个子串
if (name1.contains("very"))
{qInfo() << "name1 中包含 very";
}
//判断name1中是否以I开始以?结束
if (name1.startsWith("I") && name1.endsWith("?"))
{qInfo() << "name1中是以I开始以?结束的";
}

字节数组遍历操作

//字节数组的遍历
qInfo() << "---------------------------";
name1 = "LOVE";
for (auto& v : name1)
{qInfo() << v;
}
qInfo() << "---------------------------";
for (int i = 0; i < name1.size(); i++)
{qInfo() << name1[i]; //下标法qInfo() << name1.at(i); //java风格访问
}
qInfo() << "---------------------------";
QByteArray::iterator iter = name1.begin();
for (iter; iter != name1.end(); iter++)
{qInfo() << *iter;
}

字节数组与其它类型之间的转换

//QByteArray --> char*
qInfo() << name1.data();      //返回值为char*
qInfo() << name1.constData(); //返回值为const char*//基本数据类型 --> QByteArray
QByteArray num;
num.setNum(1314520, 16);        //将参数一转换为16进制字符串
qInfo() << num;                   //"140ed8"num.setNum(3.1415926, 'e', 3);    //小数位数三位
qInfo() << num;                   //"3.142e+00"
num.setNum(3.1415926, 'g', 3);    //有效位数三位
qInfo() << num;                   //"3.14"//静态函数的使用
qInfo() << QByteArray::number(3.1415, 'g', 2);  //"3.1"//QByteArray --> 基本数据类型
QByteArray sum("666");
qInfo() << sum.toInt();       //666
qInfo() << QByteArray("10000000000").toInt(); //若数据越界,返回值为0bool isOk = false;
sum = "10";
uint n = sum.toUInt(&isOk, 16);    //16标识的是原来sum中的数为16进制数
if (isOk)
{qInfo() << n;        //16
}

字符串(QString)

QString也是封装了字符串, 但是内部的编码为utf8, UTF-8属于Unicode字符集, 它固定使用多个字节(window为2字节, linux为3字节)来表示一个字符,这样可以将世界上几乎所有语言的常用字符收录其中。

1.构造函数

// 构造一个空字符串对象
QString();
// 将 char* 字符串 转换为 QString 类型
QString(const char *str);
// 将 QByteArray 转换为 QString 类型
QString(const QByteArray &ba);

2.数据操作

//QString 是自带编码的
QString name("Junk is very good teacher!Good GOOD GOod!");
qInfo() << name;//替换
//Qt::CaseSensitivity::CaseInsensitive 替换时忽略大小写
name.replace("good", "bad", Qt::CaseSensitivity::CaseInsensitive);
qInfo() << name;//格式化字符串
QString _name = "Mary";
qint32 age = 18;
QString job = "打螺丝";
qInfo() << _name + QString::number(age) + job;
qInfo() << QString::asprintf("我是%s,今年%d岁,我的工作是%s",_name.toStdString().data(), age, job.toStdString().data());
qInfo() << QString("我是%1,今年%2岁,我的工作是%3").arg(_name).arg(age).arg(job);//输出时间
quint32 second = 3600520;
auto str = QString("%1天,%2:%3:%4").arg(second / 3600 / 24).arg(second % 24, 2, 10, QChar('0')) //输出宽度2  十进制  填充字符.arg(second % 60).arg(second % 24 % 60);
qInfo() << str;

QByteArray与QString的区别

//获取本地编码
QString s("哈hello");
qInfo() << "本地编码:" << s.toLocal8Bit();
//获取utf8编码
qInfo() << "utf8编码:" << s.toUtf8();QByteArray array("go home!");
QString str("go home!");
qInfo() << array.size();      //8  字节个数
qInfo() << str.size();          //8  字符个数
qInfo() << "array:" << array;
qInfo() << "str:" << str;QByteArray array1("go home!哈");
QString str1("go home!哈");
qInfo() << array1.size();      //11  字节个数
qInfo() << str1.size();         //9  字符个数
qInfo() << "array:" << array1;
qInfo() << "str:" << str1;

(2)Qt中的字符串类型相关推荐

  1. 解析JavaScript中的字符串类型与字符编码支持

    JavaScript中的字符串也像Python那样支持反斜杠的转移,并且字符集方面默认为Unicode,下面就来详细解析JavaScript中的字符串类型与字符编码支持 定义 字符串就是零个或多个排在 ...

  2. Qt中的项目类型(二)

    使用Qt进行软件开发,第一个要考虑的问题就是为需要开发的软件,选择一个合适的Qt项目类型. Qt中的项目类型有: Application: "应用"项目,项目编译结果是可执行程序. ...

  3. c语言中的字符串类型

    c语言中的字符串类型c语言中的字符串类型c语言中的字符串类型 c语言没有原生字符串类型string c语言没有string类型,c语言中字符串是通过字符指针来间接实现的. char *p=" ...

  4. Qt中注册定义类型qRegisterMetaType和Q_DECLARE_METATYPE的总结

    概述 如果想要我们自己自定义的类型也可以有 Qt 自己类型的功能的话,就必须注册我们的类型到 Qt 中,这样才可以在信号和槽的通讯机制中使用我们的自定义的类型. Q_DECLARE_METATYPE ...

  5. QT中生成字符串md5的方法

    QT中,提供了QCryptographicHash类,很方便的实现的字符串到md5/md4/sha1的转换, 可以通过两种方法实现: [cpp] view plain copy QString pwd ...

  6. 12. Qt中相关字符串处理

    1  QT字符串 QString 转换为 char * 字符串,必须分成2步. 因为 s.toStdString(),  s.toLatin1()等等,都有一个问题,他的返回值必须保存,并没有存储在常 ...

  7. java中的string类型_Java中的字符串类型(String)

    String 字符串是一个引用数据类型,字符串都是对象. String特性:1.在程序中出现的字符串字面量(常量),在程序中运行时会以对象的形式保存在JVM内存的字符串池中,并且所有的这些字符串字面量 ...

  8. delphi中字符串拼接_Delphi中的字符串类型(Delphi适用于初学者)

    delphi中字符串拼接 As with any programming language, in Delphi, variables are placeholders used to store v ...

  9. C语言中没有字符串类型怎么办?

    字符串与字符数组   在前面的章节中,我们知道了可以定义char类型的变量来装字符常量. char c1, c2; c1 = 'a'; c2 = 'b';   也打印过类似于"HelloWo ...

最新文章

  1. JQuery读书笔记--JQuery-Form中的AjaxForm和AjaxSubmit的区别
  2. Altium Designer 规则设置Advance(Query)的使用
  3. 从针对接口编程到依赖注入
  4. Java 调用Dll
  5. c语言程序找出500以内的所有素数,c语言求出给定范围内的所有质数
  6. Android 实践项目开发二
  7. html加载富文本_Uniapp基础实战富文本框解析 WordPress rest api实例
  8. 搭建mediawiki开始知识共享
  9. KNN分类USPS, USI sonar及USI iris
  10. 深度学习与PyTorch入门实战教程
  11. mysql积分表和业务表_积分相关数据库表该如何设计?业务表和积分明细表该如何匹配上...
  12. 实现工地实名制门禁管理的人脸识别系统
  13. JS 事件代理和事件委托
  14. Dell Inspiron 15R - QQ语音时麦克风没有声音的设置办法
  15. 主机与虚拟机之间无法粘贴复制
  16. 计算机视觉(二)-matlab之理想低通滤波器,布特沃斯低通、高斯低通,理想高通、布特沃斯高通、高斯高通滤波器
  17. 计算机网络基础 网络互联设备和多层交换
  18. 高鸿业西方经济学重点归纳总结
  19. GitOps最强工具-2. Argo CD安装
  20. des vue 双倍长 解密_java 3des双倍长 有参考的代码给提供下吗?

热门文章

  1. 让你搞懂怎么解决LF、CRLF问题LF will be replaced by CRLF the next time Git touched it
  2. 新产品·新技术·新领域 LabVIEW能为我们做什么
  3. Ajax实现无刷新分页效果
  4. 湘大计算机网络试卷,湖南省计算机二级题库tc
  5. 社交网络app数据库设计_建立自己的社交网络,游戏服务器或知识库! -Sourcehunt
  6. CCD自动对位焊锡机应用案例
  7. C语言 字符串 ----子串
  8. Y450安装Snow leopoard简单教程分享 2012/1/20
  9. 教你怎么用59秒就能打动客户,想快速赚钱一定来
  10. FTP防火墙数据通道端口范围无法设置