QT字符串

C++语言提供了两种字符串的实现:C风格的字符串,以’/0‘结尾,
std::string,即标准模版库中的类,
Qt则提供了自己的字符串实现:QString。
QByteArray把数据直接以字节流的方式来对待

QTCreator使用MSVC中文乱码问题

1.项目->编辑器
在这里插入图片描述
2.在代码中添加

#pragma execution_character_set("utf-8")

QString和QByteArray互转

1.QString 转QByteArray

QString  qs;
QByteArray byteArray =  qs.toLatin1();//QT5

2.QByteArray转QString

QByteArray byteArray ;
QString qs= QString(byteArray );

3.QString和int互转

int num = 1;
QString str = QString::number(i);//int转QString ,
QString str = "1";
int num = str.toInt();//QString 转int 

4.char*转string

const char *mm = "hello大家好";
QString str = QString(mm);

5.char数组转QByteArray

char*a = new  char[10];
memset(a,0,sizeof (a));
a[0] = 0x10;
a[1] = 0x20;
a[2] = 0x30;
a[3] = 0x00;
a[4] = 0x40;
QByteArray arrt = QByteArray(a,5);//一定要指定个数

6.QByteArray 转十六进制QString

方法一:

QString _ByteArrayToHexString(QByteArray data){
    QString ret(data.toHex().toUpper());
    int len = ret.length()/2;
    for(int i=1;i<len;i++)
    {
        ret.insert(2*i+i-1," ");
    }

    return ret;
}

方法二:

QString ByteArrayToHexString(QByteArray ascii)//字符串转16进制
{
    QString ret;
    for(int i = 0; i < ascii.count(); i++)
        ret.append(QString("%1 ").arg((uchar)ascii.at(i), 2, 16, (QChar)'0'));

    return ret.toUpper();
}

7.十六进制QString转QByteArray

QString aa ;//aa = "10 20 30 00 40"
QByteArray text = QByteArray::fromHex(aa.toLatin1());
//text = 0x10 0x20 0x30 0x00 0x40

QString转十六进制QByteArray

QByteArray data = qstr.toLatin1().toHex();

std::string转QString

std::string str = "123123";
QString qstr = QString::fromStdString(str);

QString常用方法

  1. QString采用 Unicode 内部编码,字符串的存储有引用计数,当一个 QString 对象被复制为另一个QString 对象时,它们实际上指向相同的存储空间,仅仅是增加一个引用计数。只有在其中一个被修改时才会真正复制一个新的字符串。
  2. 重载了+,+=,==

常用方法

1.拼接 apped()

   str = "hello: "; 
   str.append("nihao"); 
   str.append("\n");

2.比较 compare()

	//返回int类型值,等于0表示相同,不等于0不同
	//Qt::CaseInsensitive 这个类型,表示大小写不敏感  Qt::CaseSensitive 表示大小写敏感
    QString str="nihao" ;
    int nRet = str.compare("nihao",Qt::CaseInsensitive);

3.判空

	QString str;
	if(str==nullptr){
	    qDebug("空");
	}
	
	if(str==""){
	    qDebug("空");
	}
	isNull():判断是否为空对象。
	isEmpty():判断是否为空串。
	QString a("");
    a.isEmpty();        // 真
    a.isNull();         // 假

    QString b;
    b.isEmpty();        // 真
    b.isNull();         // 真

4.大小写装换

QString str="niHao" ;
str=str.toLower();//nihao
str=str.toUpper();//NIHAO
QString str="ni\0Hao" ;
str=str.toLower();//ni,toLower()遇到\0停止
str=str.toUpper();//NI,toUpper()遇到\0停止

5.去获取长度,length(),size()遇到\0停止

QString str="nihao" ;
int len=str.length();//这里输出结果为:5
len=str.size();//这里输出结果为:5
len = sizeof(str);//这里输出结果为:8
QString str="ni\0hao" ;
int len=str.length();//这里输出结果为:2

QString 用length()返回字符串的长度,即字节数, 在中英文字符都是以 Unicode 方式编码的,所以,无论中英文都算的长度为 1。
想要取得英文长度为 1 中文长度为 2 的总长度,必须用toLocal8bit()。具体使用方法如下所示:

QString s = “abcd上海上海”;
int length = s.length(); //length = 8;
length = s.toLocal8Bit().length(); //length = 12

6.查找

contains第二参数,默认大小写敏感。
大小写不敏感的比较:Qt::CaseInsensitive

str.contains("hel",Qt::CaseInsensitive);

7.替换

 QString str="nihao" ;
 str=str.replace("hao","xxx");//nixxx

8.转换

toInt()toFloat()toDouble(),toUShort()

9.判断开头结尾是否为指定字符串,正确返回true

QString str="Hel\0lo " ;
bool aaaaa = str.startsWith("H");//第二个参数可以设置大小写敏感

QString str="Hel\0lo " ;
bool aaaaa = str.endsWith("o");//第二个参数可以设置大小写敏感

10.指定位置开始删除n个字符,返回该字符引用

QString str="Hel\0lo " ;
str = str.remove(1,1);//第二个参数可以设置大小写敏感,str=“Hl”

11.分割

split():按照指定的字符分割,返回QStringList

QString str("ab,cd,ef,g,h");
QStringList list = str.split(",");

section函数

QString str = "192.168.7.142";
QString  aaa = str.section('.', 0, 0).trimmed();
QString  bb = str.section('.', 1, 1).trimmed();
QString  cc = str.section('.', 2, 2).trimmed();
QString  dd = str.section('.', 3, 3).trimmed();

QString QString::section ( QChar sep, int start, int end =
-1,SectionFlags flags = SectionDefault ) const 这个函数把字符串看成是几个块,这些块由 sep 分隔,start 和 end 指定块号,end 默认为 –1 ,返回的是[ start, end ]内的块组成的字符串,如果 start
和end 都是负数,那么将从字符串的后面往前面数,返回 [ -end,
–start]内的块组成的字符串。SectionFlags是一些标记,如SectionSkipEmpty表示如果两个分隔符之间是空串,那么就会跳过

QStringList QString::split ( const QChar & sep, SplitBehavior behavior
= KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const 这个函数把所有的由 sep 分隔的块装进一个 QStringList 中返回

12.拼接

QString::arg()用法
QString().arg();arg中可以用QByteArray,但是碰到0x00会中断

QString str = QString("%1 %2 %3").arg(1).arg(2.0).arg("hello");

13.获取指定字符串位置

QString temp ="shanghai_123_shanghai_1pudong";
QString str = "shanghai";
int b =  temp.indexOf(str,1); //b=13 ,从第一个位置开始查找

14.string和char*互转

string转char*
方法一:有中文字符也可以用

QString str = "hello大家好"; //QString转char *
std::string stdstr = str.toStdString();
const char *mm = stdstr.c_str();
//不能写成const char *mm = str.toStdString().c_str();

15.string和int互转

纯数字

str = "100";
int i = str.toInt();

十六进制

str = "EB8A";
int i = str.toInt(0, 16);

方法二:不能有中文字符

QString str = "hello大家好";
QByteArray byteArr =  str.toLocal8Bit();;
const char *mm = byteArr .data();

char*转string

const char *mm = "hello大家好";
QString str = QString(mm);

16.QString查询指定字符串和截取

QString temp ="shanghai_123_shanghai_1pudong";
QString str = "shanghai";
bool bl = temp.contains(str, Qt::CaseSensitive);//bl = true表示存在
int aa =  temp.indexOf(str); //aa=0
int b =  temp.indexOf(str,1); //b=13 ,从第一个位置开始查找
int e = temp.lastIndexOf(str); // 从后查找 e = 13
int c = temp.indexOf(str, 14); // c=-1
//取出123
QString temp123 = temp.mid(temp.indexOf(str)+str.size()+1,3);//temp123 = "123"
//从左边取出第一个1之前的字符串
QString templeft = temp.left(temp.indexOf("1"));//templeft = "shanghai_"
//取出第二1之后的所有字符串
QString tempright = temp.right(temp.size()- temp.lastIndexOf("1"));//templeft = "1pudong"

QByteArray常用方法

1.以’\0’结尾

2.size()大小,不包含’\0’ ,qstrlen()包含’\0’

3.data()返回一个指向所存储的数据对象的指针

4.可以使用at()与[]

5.可以使用Left(int len) right(int len) mid(int pos, int len)提取

6.prepend() append() 分别是从前面和后面添加字符串

7.replace

8.indexOf

9.lastIndexOf

10.isNull()和isEmpty()跟QString一样

11.chop(int n)从最后删除n个字节

12.int QByteArray::count ( const QByteArray & ba ) const返回ba在字符数组中出现的次数

13.QByteArray::toHex将字节流转换成ACSII编码

QByteArray byte("123456");
QByteArray byteHex = byte.toHex();//byteHex  = "313233343536"

14.QByteArray::fromHex将ACSII编码转字节流

QByteArray byte("31323334");
QByteArray byteFromHex = QByteArray::fromHex(byte);//byteFromHex = 123456
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值