【嵌入式——QT】字符串

【嵌入式------QT】字符串

QString

构造函数

cpp 复制代码
QString(const QByteArray &ba)
QString(const char *str)
QString(QString &&other)
QString(const QString &other)
QString(QLatin1String str)
QString(int size, QChar ch)
QString(QChar ch)
QString(const QChar *unicode, int size = -1)
QString()

QString类从字符串转换为整数的函数

cpp 复制代码
int toInt(bool *ok=nullptr, int base=10) const;
uint toUInt(bool *ok=nullptr, int base=10) const;
long toLong(bool *ok=nullptr, int base=10) const;
qlonglong toLongLong(bool *ok=nullptr, int base=10) const;
qulonglong toULongLong(bool *ok=nullptr, int base=10) const;
short  toShort(bool *ok=nullptr, int base=10) const;
ushort toUShort(bool *ok=nullptr, int base=10) const;
float toFloat(bool *ok=nullptr) const;
double toDouble(bool *ok=nullptr) const;

默认是从十进制表示的字符串转换为整数,若指定整数基参数,还可以直接将二进制、十六进制字符串转换为整数。

cpp 复制代码
QString str = "1";
bool *ok;
str.toInt(ok,16);

进制转换

cpp 复制代码
QString str = "111";
int val = str.toInt();//十进制
str = str.setNum(val,16); // 十六进制
str = str.setNum(val,2); // 二进制

其他常用功能

append()和prepend()

prepend()在原字符串的开头插入另一个字符串str.prepend("aaa");

append()在原字符串后面拼接字符串str.append("aaa");

toUpper()和toLower()

toUpper()字符串转换成大写str.toUpper();

toLower()字符串转换成小写str.toLower();

count()、size()、length()

返回字符串的个数。

trimmed()、simplified()

trimmed()移除字符串两端的空白字符str.trimmed();

simplified()移除字符串两端的空白字符,使用单个空格字符代替字符串中出现的空白字符str.simplified();

indexOf()、lastIndexOf()

indexOf()查找字符串出现的位置str.indexOf("a");

lastIndexOf()查找字符串最后出现的位置str.lastIndexOf("b");

isNull()、isEmpty()

cpp 复制代码
都是判断字符串是否为空,如果一个空字符串只有"\0",isNull()返回false,isEmpty()返回true。
只有未赋值的字符串 isNull()才返回true

contains()

判断一个指定的字符串是否出现过,str.contains("welcome");

startWith()、endWith()

startWith()判断一个字符串是否以某个字符串开头

cpp 复制代码
str.startsWith("welcome",Qt::CaseSensitive); 
Qt::CaseSensitive 区分大小写

endWith()判断一个字符串是否以某个字符串结尾

left()、right()

left()从字符串左边取多少个字符str.left(n);

right()从字符串右边取多少个字符str.right(n);

sections()

从字符串中提取以sep作为分隔符,从start到end端的字符串。

cpp 复制代码
str1= str.sections(",",0,0);
str1= str.sections(",",1,1);

arg()

组合字符串。

cpp 复制代码
QString str =  QString("%1 was born in % 2").arg("John").arg(2000);

比较两个字符串是否相等

cpp 复制代码
QString str = QString::fromLocal8Bit("字符串");
if(str.compare(QString::fromLocal8Bit("字符串") == 0){}
或
if(str ==QString::fromLocal8Bit("字符串")){}

QByteArray

构造函数

cpp 复制代码
QByteArray::QByteArray(const char *data, int size = -1)
QByteArray::QByteArray(QByteArray &&other)
QByteArray::QByteArray(const QByteArray &other)
QByteArray::QByteArray(int size, char ch)
QByteArray::QByteArray()

其他常用功能

在尾部追加数据

cpp 复制代码
QByteArray &QByteArray::append(const QByteArray &ba)
QByteArray &QByteArray::append(char ch)
cpp 复制代码
QByteArray x("free");
QByteArray y("dom");
x.append(y);

在头部添加数据

cpp 复制代码
QByteArray &QByteArray::prepend(const QByteArray &ba)
QByteArray &QByteArray::prepend(char ch)
cpp 复制代码
QByteArray x("ship");
QByteArray y("air");
x.prepend(y);

将ba插入到第i个字节位置

cpp 复制代码
QByteArray &QByteArray::insert(int i, const QByteArray &ba)
QByteArray &QByteArray::insert(int i, char ch)
cpp 复制代码
QByteArray ba("Meal");
ba.insert(1, QByteArray("ontr"));

删除

cpp 复制代码
QByteArray &QByteArray::remove(int pos, int len)

QByteArray ba("Montreal");
ba.remove(1, 4);

删除尾部n个字节

cpp 复制代码
void QByteArray::chop(int n)

QByteArray ba("STARTTLS\r\n");
ba.chop(2);                 // ba == "STARTTLS"

截断数组,前部分留下,后部分删除

cpp 复制代码
void QByteArray::truncate(int pos)

QByteArray ba("Stockholm");
ba.truncate(5);             // ba == "Stock"

清空数据

cpp 复制代码
void QByteArray::clear()

字符串替换

cpp 复制代码
QByteArray &QByteArray::replace(const QByteArray &before, const QByteArray &after)

QByteArray ba("colour behaviour flavour neighbour");
ba.replace(QByteArray("ou"), QByteArray("o"));
// ba == "color behavior flavor neighbor"

判断是否包含子字符串

判断是否包含子字符串,包含返回true,不包含返回false

cpp 复制代码
bool QByteArray::contains(char ch) const

判断字符串是否以ba开头

cpp 复制代码
bool QByteArray::startsWith(const QByteArray &ba) const

判断字符串是否以ba结尾

cpp 复制代码
bool QByteArray::endsWith(const QByteArray &ba) const

迭代器

cpp 复制代码
QByteArray::const_iterator QByteArray::begin() const
QByteArray::const_iterator QByteArray::end() const

取出第i个数据

cpp 复制代码
char QByteArray::at(int i) const

查看对象中的字符个数

cpp 复制代码
int QByteArray::count() const
int QByteArray::size() const
int QByteArray::length() const

转换成char*

cpp 复制代码
char *QByteArray::data()

 QByteArray ba("Hello world");
 char *data = ba.data();
 while (*data) {
     cout << "[" << *data << "]" << Qt::endl;
     ++data;
 }

QByteArray转十六进制

cpp 复制代码
QByteArray QByteArray::toHex() const

转大/小写

cpp 复制代码
QByteArray QByteArray::toUpper() const
QByteArray QByteArray::toLower() const

QByteArray转int

cpp 复制代码
int QByteArray::toInt(bool *ok = nullptr, int base = 10) const

QString 与 QByteArray的区别

  • QString:专门用来处理字符串,支持多种编码,包括ASCII和各国语言的编码。默认情况下,QString会将所有数据视为UTF-8编码进行处理。它更高级、更抽象,并且基于Unicode字符;
  • QByteArray:用于处理字节流(字节数组的形式存储),主要处理ASCII编码字符。对于其他复杂的编码(如UTF-8),它直接以字节流的方式处理。它更底层、更具体,可视作char的替代品,并提供char数据接口;
  • QString:其基本单位是Unicode字符(QChar)。它不提供char* data()这样的接口来访问其具体存储内容,而是提供QChar* data()接口;
  • QByteArray:其基本单位是一个个字节。它提供了char* data()接口,用于访问其存储的字节;
  • QByteArray与QString之间的转换相对简单。QByteArray可以存储无法显示的字符(如0x00-0x19),而QString只存储可显示的字符(如0x30等,对应于ASCII表中的可显示字符);
  • 对于需要存储和传输数据,或者在网络编程中需要以字节流形式处理数据的场景,使用QByteArray更为合适;
  • 对于其他大多数处理字符串的场景,使用QString更为合适。
相关推荐
逝灮19 分钟前
【蓝桥杯——物联网设计与开发】基础模块8 - RTC
stm32·单片机·嵌入式硬件·mcu·物联网·蓝桥杯·rtc
波音彬要多做22 分钟前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
捕鲸叉23 分钟前
C++软件设计模式之外观(Facade)模式
c++·设计模式·外观模式
Swift社区31 分钟前
Excel 列名称转换问题 Swift 解答
开发语言·excel·swift
一道微光34 分钟前
Mac的M2芯片运行lightgbm报错,其他python包可用,x86_x64架构运行
开发语言·python·macos
矛取矛求39 分钟前
QT的前景与互联网岗位发展
开发语言·qt
Leventure_轩先生39 分钟前
[WASAPI]从Qt MultipleMedia来看WASAPI
开发语言·qt
向宇it1 小时前
【从零开始入门unity游戏开发之——unity篇01】unity6基础入门开篇——游戏引擎是什么、主流的游戏引擎、为什么选择Unity
开发语言·unity·c#·游戏引擎
是娜个二叉树!1 小时前
图像处理基础 | 格式转换.rgb转.jpg 灰度图 python
开发语言·python
Schwertlilien1 小时前
图像处理-Ch5-图像复原与重建
c语言·开发语言·机器学习