天天看点

浅谈C/C++/Qt里的类型转换(char*、string、int、double、float、QString、QByteArray之间相互转化)

浅谈C/C++里的类型转换(char*、string、int之间相互转化)

1.char*/char[]到string

将char* 或者 char[]转换为string,可以直接赋值转换

char* ch1 = "hellow nihao";
	char ch2[] = "hahahhaha";
	std::string str1 = ch1;
	std::string str2 = ch2;
           

2.string到char*/char[]

string是C++标准库里其中的一个,封装了对字符串的操作,在将string转换为char*或者char[],一般有常见的三种方法:

a.调用string的data方法

std::string str = "nihhao hahhah";
	const char* ch = str.data();
           

b.调用string的c_str方法

std::string str = "nihhao hahhah";
	const char* ch = str.c_str();
           

c.调用string的copy方法

std::string str = "nihhao hahhah";
	char ch[20];
	str.copy(ch,str.length(),0);  //最后参数0代表复制的起始位置
           

简单介绍:

const char* c_str():

c_str()函数返回一个指向正规c字符串的指针,内容与string字符串相同。这样做的目的是为了与C语言语法相兼容(c语言没有string类型)。

data()只是返回原始数据序列。

3.QString与QByteArray转换

a.QString转QByteArray

QString str("nanshuyimeng");  
QByteArray byteArray = str.toLatin1();  //Qt5以上
           

b.QByteArray转QString

QByteArray byteArray("nanshuyimeng");

QString str1 = byteArray;

QString str2(byteArray);

QString str3;
str3.append(byteArray);
           

4.QString与C类型之间相互转换

a.string与QString转换

std::string str = "nanshuyimeng";
	QString qstr = QString::fromStdString(str);     //string到QString
    std::string str2 = qstr.toStdString();            //QString到string    
           

b.QString与char*转换

QString qstr = "namshuyimeng";
	QByteArray ba = qstr.toLatin1();
	char* ch = ba.data();
	
//或者
    QString qstr = "namshuyimeng";
    std::string str = qstr.toStdString();
	char* ch = str.c_str();
	//char* ch = str.data();

           

5.QString与数值类类型转换

a.QString到数值类型

QString Qstr = "10";
	int aa1 = Qstr.toInt();
	double bb1 = Qstr.toDouble();
	float cc1 = Qstr.toFloat();
	
	QString str = "AA";
	bool ok;
	int dec = str.toInt(&ok,10);    //十进制
	int hex = str.toInt(&ok,16);    //十六进制
           

b.数值类型到QString

int a = 63;
	QString str1 = QString::number(a,10);  以十进制转换
	QString str2 = QString::number(a,16).toUpper();    以十六进制转换并转换为大写
           

总结:像其他类型之间的转换我们可以借助中间类型转换达到我们需要需要转换的目的,如果大家还有其他好的建议,欢迎下方评论,不断完善更新。

继续阅读