关于C++中字符串与数字的互相转换
方法搬自博客: Qt数据类型转换 侵删
1. 把QString转换为double类型
//法一: QString str="123.45"; double val=str.toDouble(); //val=123.45 //法2: 很适合科学计数法形式转换 bool ok; double d; d=QString("1234.56e-02").toDouble(&ok); //ok=true;d=12.3456.
2. 把QString转换为float形
法1: QString str="123.45"; float d=str.toFloat(); //d=123.45 法2: QString str="R2D2"; bool ok; float d=str.toFloat(&ok); //转换是被时返回0.0,ok=false;
3. 把QString形转换为整形
1.转换为十进制整形
注意:基数默认为10。当基数为10时,并且基数必须在2到36之间。如果基数为0,若字符串是以0x开头的就会转换为16进制,若以0开头就转换为八进制,否则就转换为十进制。
Qstring str="FF"; bool ok; int dec=str.toInt(&ok,10); //dec=255 ; ok=rue int hex =str.toInt(&ok,16); //hex=255;ok=true;
4. 常整形转换为Qstring形
long a =63; QString str=QString::number(a,16); //str="3f"; QString str=QString::number(a,16).toUpper(); //str="3F";
5. Qstring 转换char*问题!
//方法一: QString qstr("hello,word"); const char * p = qstr.toLocal8Bit().data(); //方法二: const char *p = qstr.toStdString().data();
6. 把当前时间转化为QString
public QDateTime qdate = QDateTime.currentDateTime(); datetime = qdate.toString("yyyy年MM月dd日ddddhh:mm:ss");
//如果不是QTime和QDate类比如说:通过TCP/IP接收到的char unsigned char 类等如何转换为QString类 QString Time2String( DWORD dwTime) { char cTime[50] = {0}; memset(cTime,0,50); strftime(cTime,32,"%Y-%m-%d %H:%M:%S",localtime(&time_t(dwTime))); return QString(cTime); }
7. QString转换为char*
QString str1 = "Test"; QByteArray ba = str1.toLatin1(); const char *c_str2 = ba.data(); printf("str2: %s", c_str2);
8. char* 转 QString:
char port[10]="COM3"; QString szPort =QString(port);
9. int 转 QString :
int index=1; QString szId =QString::number(index); //或者可以使用setNum函数. QString str; str.setNum(1243); //str=="1234"
10. float/double 转 QString :
float fSpeed =3.2; QString szSpeed =QString::number(fSpeed,'f',2 );//szSpeed的内容为"3.20"
//此处注意一下这个函数: QString QString::number ( double n, char f = 'g', int prec = 6 ) [静态] 这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。 根据fmt指定的格式,参数n被格式化,g为默认情况并且可以为下列之一: e - 格式化为[-]9.9e[+|-]999 E - 格式化为[-]9.9E[+|-]999 f - 格式化为[-]9.9 g - 使用e或f格式,看哪一个更简练 G - 使用E或f格式,看哪一个更简练 在所有的情况下,小数点之后数字的个数等于prec指定的精度。
则double科学计数法转QString可以使用number或setNum. 这两个函数使用方法不一样
QString str; str.setNum(111.111, 'E', 2); //或使用number QString str = QString::number(111.111, 'E', 2);
11. 多个变量 到 QString:
char port[10]="COM2"; intbaudrate =9600; QString szFailed =QString("Open %1 baudrate %2 failed!").arg(port).arg(baudrate);
12. 中文 到 QString:
QString szOpened =QString::fromLoacal8Bit("打开串口");
13. 中文和变量组合 到 QString:
char port[10]="COM2"; intbaudrate =9600; QString szFailed =QString::fromLoacal8Bit("打开串口%1, 波特率%2").arg(port).arg(baudrate);
14. char * 与 const char *的转换
char *ch1="hello11"; const char *ch2="hello22"; ch2 = ch1;//不报错,但有警告 ch1 = (char *)ch2;
15. char 转换为 QString
char a='b'; QString str; str=QString(a);
16. QString 转换为 char
QString str="abc"; char *ch; ch = str.toLatin1.data();
17. QByteArray 转换为 char *
char *ch;//不要定义成ch[n]; QByteArray byte; ch = byte.data();
18. char * 转换为 QByteArray
char *ch; QByteArray byte; byte = QByteArray(ch);
19. QString 转换为 QByteArray
QByteArray byte; QString string; byte = string.toAscii();
20. QByteArray 转换为 QString
QByteArray byte; QString string; string = QString(byte);
21. int 转 QString
int a=10; QString b; b=QString::number(a)
22. QString 转int
QString a="120" int b; b=a.toInt()