C++的字符串 VS2019
最近在修改Chromium的项目中 遇到了char string wchar_t wstring tchar CString
我们挨个挨个来:
TCHAR
因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串
TCHAR是通过define定义的字符串宏
当定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wcslen
ANSI char szString[100]; strcpy(szString,"test"); Unicode wchar_t szString[100]; wcscpyszString,L"test");
tchar:头文件:#include <tchar.h>
CString
CString:头文件:#include <atlstr.h>
Cstring ,MFC的字符串类
Cstring本质就是const TCHAR*
现在说下这两个的转换格式以及输出
tchar->CString
#include <iostream> #include <tchar.h> #include <atlstr.h> using namespace std; int main() { setlocale(LC_ALL, "CHS"); TCHAR szTchar[18] = L"TCHAR"; CString str; str.Format(_T("%s"), szTchar); //cout不支持宽字符,如果需要使用UNICODE,需要使用wcout输出宽字符 并且对CString做一下转换 wcout << LPCTSTR(str) << endl; wcout << str.GetString() << endl;
system("pause"); return 0; }
CString->tchar
#include <iostream> #include <tchar.h> #include <atlstr.h> using namespace std; int main() { setlocale(LC_ALL, "CHS"); TCHAR szTchar[18] = L"TCHAR"; //Tchar转CString CString str; str.Format(_T("%s"), szTchar); wcout << LPCTSTR(str) << endl; //cout不支持宽字符,如果需要使用UNICODE,需要使用wcout输出宽字符 并且对CString做一下转换 wcout << str.GetString() << endl; //CString转Tchar int iLen = str.GetLength(); TCHAR* szRs = new TCHAR[iLen]; lstrcpy(szRs, str.GetBuffer(iLen)); str.ReleaseBuffer(); system("pause"); return 0; }
wchar_t
char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char型无法表示。
wchar_t数据类型一般为16位或32位,但不同的C或C++库有不同的规定
wstring
相当于const wchar_t
wchar_t->wstring
wstring->wchar_t
wchar_t a[100] = L"哇哈哈123a"; //wchar_t 转 wstring wstring temp(a); //wstring 转wchar_t const wchar_t* b = temp.c_str();
char 和 string
大家一定都熟悉啦
char c[100] = "哈哈哈"; //char 转 string string strTemp(c); //string 转 char const char* d = strTemp.c_str();
OK! 以上都是小样子!
现在!我们来看看怎么转!
https://blog.csdn.net/mercy_ps/article/details/81218608
使用windows api
string转wstring
wstring string2wstring(string str) { wstring result; //获取缓冲区大小,并申请空间,缓冲区大小按字符计算 int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0); TCHAR* buffer = new TCHAR[len + 1]; //多字节编码转换成宽字节编码 MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len); buffer[len] = '