窄字符转宽字符

以前碰到这个问题整了很久,然后今天又碰到这个问题又整了很久,而且居然忘记了上次碰到过,诶看来是老了,所以还是做个笔记吧!

ASCII 字符(窄字符,8位):CHAR, char ,LPCSTR, LPSTR ,PCHAR, PCSTR ,PSTR ,std::string  
Unicode 字符(宽字符,16位):LPCWSTR ,LPWSTR ,PCWSTR ,PTCHAR, PWCHAR, PWSTR, WCHAR ,CString 

说说这些大写字母的含义,这样比较好记忆,

L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
T表示在Win32环境中, 有一个_T宏
STR表示这个变量是一个字符串

最常用的转换 A 为窄字符 W 为宽字符: 
A to W 的方式有: 
W = _T(“A”) ;W = TEXT(“A”); W = L”A”;W = A2W(A); 
W to A 的方式有: 
A = W2A(W) ;A = W2BSTR(W) ; 

此外:

wchar_t* CharToWchar(const char* c){
	int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);
	wchar_t* m_wchar=new wchar_t[len+1];
	MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);
	m_wchar[len]='\0';
	return m_wchar;
}

wchar_t* StringToWchar(const std::string& s){
	const char* p=s.c_str();
	return CharToWchar(p);
}

直接调用stringtowchar()函数就行了!

STL::string s1;LPCTSTR pS2 = s1.c_str();

Cstring->std::string;

方法一:CString重载过了const char *操作符,而std::string有const char *的构造函数。正好OK
CString cstr("sdfs");
std::string sss(cstr);

方法二:

CString str("hello");
string s;
s = str.GetBuffer(0);
或  s = string(str.GetBuffer(0));

//注意释放ReleaseBuffer

std::string->CString

方法一:

string s("hello");
CString str;
str = s.c_str();
或str = CString(s.c_str());

你可能感兴趣的:(unicode,ASCII,LPCWSTR,字符转化)