您的位置:首页 > 其它

wchar_t*,wchar_t,wchat_t数组,char,char*,char数组,std::string,std::wstring,CString

2011-01-20 15:51 513 查看
#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 转换为宽字符 wstring

inline 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;

// 注:设置语言环境以便输出WideChar

setlocale(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 转换 string

str.insert( str.begin(), ch );

cout << str << endl;

// 注:wchar_t* 转换 string

pWideChar = 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* 转换 string

str = 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 转换 string

str = string(cStr.GetBuffer(cStr.GetLength()));

// 注:char* 转换 CString

cStr = 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 );

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐