【嵌入式------QT】字符串
- QString
- QByteArray
- [QString 与 QByteArray的区别](#QString 与 QByteArray的区别)
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更为合适。