大家好,欢迎来到IT知识分享网。
一、字符集的概念
1. 多字节字符集
0 到 127之间的字符,依旧是一个字节代表一个字符,超出部分 2 个字节来表示一个字符
2. UTF-8
变长的编码方式,单字节与ASCII相同,对于n字节的符号(n > 1),首字节前n位为1,n+1为0,后面字节前两位都是10
3. UTF-16(两字节或是四字节)
4. UTF-32(四字节)
二、字节序(BOM)的概念
- 小端字节序(LE):低位在前(0x001A23 23 1A 00)
- 大端字节序(BE):高位在前(0x001A23 00 1A 23)
- BOM字节序标志头(文本头FE FF是BE)
三、QString常用功能
- isNull():判断是否为空对象。
- isEmpty():判断是否为空串,也可以用(str == “”)。
- append():字符串追加(拼接),也可以用 + 进行拼接。
- .arg():格式化输出字符串。https://www.cnblogs.com/lvdongjie/p/3758031.html
- QString::number(12):将整型、字符型转换成字符串,也可以自行设置精度。
- toInt(),toFloat(),toDouble():将字符串转换成整型,单精度浮点型,双精度浮点型。
1. QString遍历
- 通过迭代器遍历
for(QString::iterator itr = itstr.begin();itr != itstr.end();itr++)
- 通过for循环遍历下标访问
for(int i = 0; i < itstr.size(); itr++)
2. QString查找
原始字符串.indexOf(要查找的字符串,查找的起始位置),如果查找到了就返回当前查找字符串起始位置的索引,如果找不到就返回-1。
3. QString截取
- 1、bool QString::startsWith() :字符串以XX开头,返回true,第二个参数可以设置大小写敏感
QString str = "Bananas"; str.startsWith("Ban"); // returns true str.startsWith("Car"); // returns false
- 2、bool QString::endsWith() : 字符串以XX结尾,返回false,第二个参数可以设置大小写敏感
QString str = "Bananas"; str.endsWith("anas"); // returns true str.endsWith("pple"); // returns false
- 3、QString QString::trimmed(): 返回前后没有空格的字符串
QString str = " lots\t of\nwhitespace\r\n "; str = str.trimmed(); // str == "lots\t of\nwhitespace"
- 4、QString &QString::remove(int position, int n) :指定位置开始删除n个字符,返回该字符引用
QString s = "Montreal"; s.remove(1, 4); // s == "Meal"
- 5、int QString::indexOf():返回从指定位置开始第一次出现的索引位置,未找到返回-1。第二个参数可以设置大小写敏感
QString x = "sticky question"; QString y = "sti"; x.indexOf(y); // returns 0 x.indexOf(y, 1); // returns 10 x.indexOf(y, 10); // returns 10 x.indexOf(y, 11); // returns -1
- 6、int QString::lastIndexOf() :返回此字符串中字符串str的最后一次出现的索引位置,从索引位置向后搜索。如果from是-1(默认值),搜索从最后一个字符开始;如果from是-2,则在倒数第二个字符处,依此类推。如果没有找到str,则返回-1。第二个参数可以设置大小写敏感
QString x = "crazy azimuths"; QString y = "az"; x.lastIndexOf(y); // returns 6 x.lastIndexOf(y, 6); // returns 6 x.lastIndexOf(y, 5); // returns 2 x.lastIndexOf(y, 1); // returns -1
- 7、QString QString::right(int n) const : 返回包含该字符串的最右n个字符的子字符串。
QString x = "Pineapple"; QString y = x.right(5); // y == "apple"
- 8、QString QString::left(int n) const : 返回包含该字符串的最左n个字符的子字符串。
QString x = "Pineapple"; QString y = x.left(4); // y == "Pine"
- 9、QString QString::mid(int position, int n = -1) const : 返回一个包含该字符串的n个字符的字符串,从指定的位置索引开始。
QString x = "Nine pineapples"; QString y = x.mid(5, 4); // y == "pine" QString z = x.mid(5); // z == "pineapples"
- 10、chop(int n):改变的是原有字符串
QString s = "abcd"; s.chop(2); qDebug() << s << endl; //ab
4. QString替换
- replace():字符串替换
QString str("abcdef"); str.replace("a","abcdf"); //abcdefbcdef
5. QString分割
- split():按照指定的字符分割
QString str("ab,cd,ef,g,h"); QStringList list = str.split(","); qDebug() << list;
四、QString正则表达式
1. QRegExp正则表达式
QString str = "abcdefg123hijk[num]lmn 456 958"; int pos = str.indexOf(QRegExp("[0-9]+")); cout << pos << endl; // 7 QString str2 = str; str2.replace(QRegExp("[0-9]+"),"[num]"); qDebug() << str2 << endl; //"abcdefg[num]hijk[num]lmn [num] [num]" QStringList stringList = str.split(QRegExp("[0-9]+")); for(int i = 0;i < stringList.size();i++) {
qDebug() <<stringList[i] << endl; }
五、QT中文乱码问题
1. QT字符集设置解决中文乱码的问题
#pragma execution_character_set("UTF-8")
2. 将GBK转换成QString
char *src = "元数据中文GBK"; //本地编码方式 默认GBK QString str1 = QString::fromLocal8Bit(src);
3. 将QString 转换成GBK
注意:vs 里面的cout 输出只能是gbk编码格式,qDebug() 输出的是utf-8格式
QString str = QString::fromLocal8Bit("中文测试"); qDebug() << str << endl; cout << str.toStdString() << endl; //直接进行转换会出现乱码 cout << str.toLocal8Bit().toStdString() << endl; //正常输出
六、字符串和数值之间的转换
1.从字符串转换为数值
- QString类从字符串转换为整数的函数有:
int QString::toInt(bool *ok = Q_NULLPTR, int base = 10) const long QString::toLong(bool *ok = Q_NULLPTR, int base = 10) const short QString::toShort(bool *ok = Q_NULLPTR, int base = 10) const uint QString::toUInt(bool *ok = Q_NULLPTR, int base = 10) const ulong QString::toULong(bool *ok = Q_NULLPTR, int base = 10) const
这些函数如果不设置参数,缺省表示从十进制表示的字符串转换为整数,若指定整数基参数,还可以直接将二进制、十六进制字符串转换为整数。
- QString将字符串转换为浮点数的函数有:
float QString::toFloat(bool *ok = Q_NULLPTR) const double QString::toDouble(bool *ok = Q_NULLPTR) const
2. 将数值转换为字符串
可以使用QString的静态函数number()和asprintf(),也可以使用其公共函数setNum()和sprintf()。QString的sprinf()函数与C语言里的sprintf()函数的格式时一样的,而setNum()和number()函数使用另外一种格式定义,而且setNum和number有多个重载函数定义,可以处理各种类型的整数和浮点数,在处理整数时还可以指定进制,例如将一个整数直接转换为十六进制或二进制字符串。
- static函数asprintf()原型(没有重载)
QString asprintf(const char *cformat, ...)
- static函数number()原型及其重载
QString number(long n, int base = 10) QString number(uint n, int base = 10) QString number(int n, int base = 10) QString number(ulong n, int base = 10) QString number(qlonglong n, int base = 10) QString number(qulonglong n, int base = 10) //第一个参数表示所想要转换的double类型数据(就算实际参数不是double类型,形参会将其赋值为double类型) //第二个参数和第三个参数分别表示格式和精度 QString number(double n, char format = 'g', int precision = 6)
- public函数setNum()原型及其重载
QString & setNum(int n, int base = 10) QString & setNum(ushort n, int base = 10) QString & setNum(short n, int base = 10) QString & setNum(uint n, int base = 10) QString & setNum(long n, int base = 10) QString & setNum(ulong n, int base = 10) QString & setNum(qlonglong n, int base = 10) QString & setNum(qulonglong n, int base = 10) QString & setNum(float n, char format = 'g', int precision = 6) QString & setNum(double n, char format = 'g', int precision = 6)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110683.html