正文
wchar_t,char,string,wstring等的总结
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
一、LPSTR LPCSTR LPTSTR LPCTSTR等
确定的类型:
LPSTR = CHAR * = char *
LPCSTR = const CHAR * = char * //c意为const
不确定类型(可变型):
LPTSTR = LPWSTR = WCHAR * = wchar_t * //(Unicode编码)
= LPSTR = CHAR * = char * //(多字节编码) TCHAR = wchar_t //Unicode编码
= char //多字节编码
二、CString与char *
- 多字节环境:CString等价于const char *,因此,在const char *的参数下可以直接使用CString,但是不能用于char *。
例:
void show(const char * name)
{
AfxMessageBox(name);
}
.........CString name("luotian");
show(name); //可以通过
CString可以智能化
在多字节环境下无论怎么赋值都是ASCII编码,比如:CString a(L"luotian"),加上L修饰,CString依然将它进行ASCII编码。
在Unicode环境下,无论怎么赋值都是Unicode编码,比如:CString a("luotian"),不加L修饰依然可以通过。
CString与LPCTSTR
在函数参数需要LPTSTR,LPCTSTR等等时,CString变量可以直接使用.
//例如:在Unicode环境下:
CString a("Luotian");
MessageBox(a);
CString->LPTSTR
//强制类型转换
CString a("Luotian");
LPTSTR p = (LPTSTR)(LPCTSTR)a;//用CString的GetBuffer()方法
LPTSTR p = a.GetBuffer();
LPTSTR->CString
可以直接赋值操作.
三、char * 与 wchar_t *的互换(重点)ASCII->Unicode
LPSTR source ="Luotian";//源串
size_t len = strlen(source) + ;
size_t converted = ;
LPTSTR dest= (LPTSTR)malloc(len*sizeof(WCHAR));mbstowcs_s(&converted,dest,len,source,_TRUNCATE);
- Unicode->ASCII
#define WChar2Char(lpWideCharStr,cbWideChar,lpMultiByteStr,cbMultiByte) \
WideCharToMultiByte(CP_ACP, , lpWideCharStr, cbWideChar, lpMultiByteStr, cbMultiByte, NULL, NULL)
例:WChar2Char(source,-,dest,cb字节数);
TCHAR dest[];
LPCWSTR source=L"Luotian";
WChar2Char(source, -, dest, );
四、string和wstringstring->const char *(LPCSTR)和wstring->const wchar_t * (等价于LPCTSTR)
//采用.c_str()方法;
string a("Luotian");
const char * p = a.c_str();
char * p->string
char * p = "luotian";
string a=p;
//string和CString的一个区别在于:函数参数需要LPTSTR时,CString可以直接用,而string不行。
ASCII->Unicode
LPSTR source ="Luotian";//源串
size_t len = strlen(source) + ;
size_t converted = ;
LPTSTR dest= (LPTSTR)malloc(len*sizeof(WCHAR));mbstowcs_s(&converted,dest,len,source,_TRUNCATE);
#define WChar2Char(lpWideCharStr,cbWideChar,lpMultiByteStr,cbMultiByte) \
WideCharToMultiByte(CP_ACP, , lpWideCharStr, cbWideChar, lpMultiByteStr, cbMultiByte, NULL, NULL)
WChar2Char(source,-,dest,cb字节数);
TCHAR dest[];
LPCWSTR source=L"Luotian";
WChar2Char(source, -, dest, );
string->const char *(LPCSTR)和wstring->const wchar_t * (等价于LPCTSTR)
//采用.c_str()方法;
string a("Luotian");
const char * p = a.c_str();
char * p->string
char * p = "luotian";
string a=p;
//string和CString的一个区别在于:函数参数需要LPTSTR时,CString可以直接用,而string不行。