注意: c++11不允许char* c = "123";
这种初始化,通常都用const char*
。 string
转char*
是不允许的。printf("%s")
只接收char*
和const char*
,不能是string
stringToNum
template
Type stringToNum(const std::string& str)
{
std::istringstream iss(str);
Type num;
iss >> num;
return num;
}
const char* 转 string
1 | const char* cc = "12345"; |
其实就是直接赋值
string转const char*
1 | std::string s = "12345"; |
const char 转 char
1 | char* c = const_cast<char*>(cc); |
char 转 const char
直接赋值转换即可
拼接const char*
先转换成string,用+运算符,最后转为const char*
类型。或者用strcat
,但是要保证空间足够:1
2
3
4
5
6char str1[30];
memset(str1, 0, sizeof(str1));
memcpy(str1, "abcd",4);
const char* str2 = "1234";
strcat(str1, str2);
cout << str1 <<endl;
还有stringstream
:1
2
3
4
5
6
std::stringstream ss;
ss << a << b;
std::string combined = ss.str();
数值类型转为string
C++11标准增加了全局函数std::to_string,有多个重载,将常用数值类型转为string1
2
3
4
5
6
7
8
9string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val)
string转数值类型
也是C++11新增加的函数1
2
3
4std::stod // string转double
std::stof // string转float
std::stoi // string转int
std::stol // string转long
QString转std::string
QString::toStdString
std::string转QString
QString::fromStdString
QString转char*
1 | QString str1 = "Hello"; |
char* 转QString
1 | char *b; |
QByteArray与QString
QString会用UTF-16编码存储,而qDebug()等I/O函数会以UTF-8编码处理。其实转换后的字节流是正确的,只是显示时用了和字节流不同的编码方式处理导致乱码
// Qt默认会使用本机编码,所以对于中文系统,下面这句设置是多余的QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
1
2
3
4
5
6
7
8
9//QByteArray转QString
QByteArray ba;
QString s = QString(ba); // 强制转换
//QString转QByteArray
QString s="abc";
QByteArray ba = s.toLocal8Bit(); // 受setCodecForLocale影响,会转换为设定的编码。如果本机不支持指定编码,则会按toLatin1处理
QByteArray baLatin1 = str1.toLatin1(); //不受setCodecForLocale影响,强制转换为ISO-8859-1编码
QByteArray bUtf8 = str1.toUtf8(); // 不受setCodecForLocale影响,强制转换为UTF-8编码
QByteArray为汉字时,输出会出现乱码,解决方法:1
2
3
4
5QByteArray ba = "汉字";
QTextCodec* tc = QTextCodec::codecForName("GBK");
qDebug()<<ba; // "\xBA\xBA\xD7\xD6"
qDebug()<<QString(ba); // "????"
qDebug()<<tc->toUnicode(ba); // 汉字
wchar_t 转 QString1
2wchar_t a[10];
QString str1= QString::fromWCharArray(a);
int/char 转 16进制QString 补01
2int a = 0x0483;
QString str1 = QString("%1").arg(a,4,16,QLatin1Char('0'));
环境设置为GB2312,汉字会显示为乱码,使用QStringLiteral会报错error: converting to execution character set: Illegal byte sequence
,发现是Mingw编译器问题,换成MSVC编译正常。