#include <string>// 使用CString必须使用MFC,并且不可包含<windows.h>#define _AFXDLL#include <afx.h>using namespace std;//----------------------------------------------------------------------------------//将 单字节char* 转换为 宽字节 wchar*inline wchar_t* AnsiToUnicode( const char* szStr ){int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 );if (nLen == 0){ return NULL;}wchar_t* pResult = new wchar_t[nLen];MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );return pResult;}//----------------------------------------------------------------------------------// 将 宽字节wchar_t* 转换 单字节char*inline char* UnicodeToAnsi( const wchar_t* szStr ){int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );if (nLen == 0){ return NULL;}char* pResult = new char[nLen];WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );return pResult;}//----------------------------------------------------------------------------------// 将单字符 string 转换为宽字符 wstringinline void Ascii2WideString( const std::string& szStr, std::wstring& wszStr ){int nLength = MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, NULL, NULL );wszStr.resize(nLength);LPWSTR lpwszStr = new wchar_t[nLength];MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, lpwszStr, nLength );wszStr = lpwszStr;delete [] lpwszStr;}//----------------------------------------------------------------------------------int _tmain(int argc, _TCHAR* argv[]){char* pChar = "我喜欢char";wchar_t* pWideChar = L"我讨厌wchar_t";wchar_t tagWideCharList[100] ;char ch = 'A';char tagChar[100] = {NULL};CString cStr;std::string str;
// 注:设置语言环境以便输出WideCharsetlocale(LC_ALL,"chs");
// 注: char* 转换 wchar_t*// 注: wchar_t 未重载 << ,所以不可使用 cout << 输出pWideChar = AnsiToUnicode( pChar );// 注:printf("%ls") 和 wprintf(L"%s") 一致printf( "%ls/n", pWideChar );
// 注:wchar_t* 转换 wchar_t[]wcscpy ( tagWideCharList, pWideChar );wprintf( L"%s/n", tagWideCharList );
// 注:wchar_t[] 转换 wchar_t*pWideChar = tagWideCharList;wprintf( L"%s/n", pWideChar );
// 注:char 转换 stringstr.insert( str.begin(), ch );cout << str << endl;
// 注:wchar_t* 转换 stringpWideChar = new wchar_t[str.length()];swprintf( pWideChar, L"%s", str.c_str());wprintf( L"%s/n", pWideChar );
// 注:string 转换 char*pChar = const_cast<char*>(str.c_str());cout << pChar << endl;
// 注:char* 转换 stringstr = std::string(pChar);// 注: cout 的 << 重载了string, 若printf 的话必须 printf("%s", str.c_str());// 而不可 print( "%s", str ); 因为 str 是个 string 类cout << str << endl;
// 注:string 转换 char[]str = "无聊啊无聊";strcpy( tagChar, str.c_str() );printf( "%s/n", tagChar );
// 注:string 转换 CString;cStr = str.c_str();
// 注:CString 转换 stringstr = string(cStr.GetBuffer(cStr.GetLength()));
// 注:char* 转换 CStringcStr = pChar;
// 注:CString 转换 char*pChar = cStr.GetBuffer( cStr.GetLength() );
// 注:CString 转换 char[]strncpy( tagChar, (LPCTSTR)CString, sizeof(tagChar));
// 注:CString 转换 wchar_t*pWideChar = cStr.AllocSysString();printf( "%ls/n", pWideChar );}
____________________________________________________________________________________________
CString 转 wchar_t
CString path = "asdf";
wchar_t wstr[256] = path.AllocSysString();
或者:
wchar_t wcstring[256];
MultiByteToWideChar(CP_ACP,0,path,-1,wcstring,256);
wchar_t转CString
WideCharToMultiByte(CP_ACP,0,wcstring,256,
path.GetBuffer(0),256,NULL,NULL);
path.ReleaseBuffer(0);
string 转 CStringCString.format("%s", string.c_str());
char 转 CStringCString.format("%s", char*);
char 转 stringstring s(char *);
string 转 char *char *p = string.c_str();
CString 转 stringstring s(CString.GetBuffer());
CString str = "fdjfdas";string s = (LPCTSTR)str;
1,string -> CStringCString.format("%s", string.c_str());用c_str()确实比data()要好.2,char -> stringstring s(char *);你的只能初始化,在不是初始化的地方最好还是用assign().3,CString -> stringstring s(CString.GetBuffer());GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.