string 与wstring

转载 2011年01月21日 09:35:00
  1. #include <string>
  2. // 使用CString必须使用MFC,并且不可包含<windows.h>
  3. #define _AFXDLL
  4. #include <afx.h>
  5. using namespace std;
  6. //----------------------------------------------------------------------------------
  7. //将 单字节char* 转换为 宽字节 wchar*
  8. inline wchar_t* AnsiToUnicode( const char* szStr )
  9. {
  10. int nLen = MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, NULL, 0 );
  11. if (nLen == 0)
  12. {
  13.    return NULL;
  14. }
  15. wchar_t* pResult = new wchar_t[nLen];
  16. MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szStr, -1, pResult, nLen );
  17. return pResult;
  18. }
  19. //----------------------------------------------------------------------------------
  20. // 将 宽字节wchar_t* 转换 单字节char*
  21. inline char* UnicodeToAnsi( const wchar_t* szStr )
  22. {
  23. int nLen = WideCharToMultiByte( CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL );
  24. if (nLen == 0)
  25. {
  26.    return NULL;
  27. }
  28. char* pResult = new char[nLen];
  29. WideCharToMultiByte( CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL );
  30. return pResult;
  31. }
  32. //----------------------------------------------------------------------------------
  33. // 将单字符 string 转换为宽字符 wstring
  34. inline void Ascii2WideString( const std::string& szStr, std::wstring& wszStr )
  35. {
  36. int nLength = MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, NULL, NULL );
  37. wszStr.resize(nLength);
  38. LPWSTR lpwszStr = new wchar_t[nLength];
  39. MultiByteToWideChar( CP_ACP, 0, szStr.c_str(), -1, lpwszStr, nLength );
  40. wszStr = lpwszStr;
  41. delete [] lpwszStr;
  42. }
  43. //----------------------------------------------------------------------------------
  44. int _tmain(int argc, _TCHAR* argv[])
  45. {
  46. char*   pChar = "我喜欢char";
  47. wchar_t* pWideChar = L"我讨厌wchar_t";
  48. wchar_t   tagWideCharList[100] ;
  49. char   ch = 'A';
  50. char   tagChar[100] = {NULL};
  51. CString   cStr;
  52. std::string str;
  53. // 注:设置语言环境以便输出WideChar
  54. setlocale(LC_ALL,"chs");
  55. // 注: char* 转换 wchar_t*
  56. // 注: wchar_t 未重载 << ,所以不可使用 cout << 输出
  57. pWideChar = AnsiToUnicode( pChar );
  58. // 注:printf("%ls") 和 wprintf(L"%s") 一致
  59. printf( "%ls/n", pWideChar ); 
  60. // 注:wchar_t* 转换 wchar_t[]
  61. wcscpy ( tagWideCharList, pWideChar );
  62. wprintf( L"%s/n", tagWideCharList );
  63. // 注:wchar_t[] 转换 wchar_t*
  64. pWideChar = tagWideCharList;
  65. wprintf( L"%s/n", pWideChar );
  66. // 注:char 转换 string
  67. str.insert( str.begin(), ch );
  68. cout << str << endl;
  69. // 注:wchar_t* 转换 string
  70. pWideChar = new wchar_t[str.length()];
  71. swprintf( pWideChar, L"%s", str.c_str());
  72. wprintf( L"%s/n", pWideChar );
  73. // 注:string 转换 char*
  74. pChar = const_cast<char*>(str.c_str());
  75. cout << pChar << endl;
  76. // 注:char* 转换 string
  77. str = std::string(pChar);
  78. // 注: cout 的 << 重载了string, 若printf 的话必须 printf("%s", str.c_str()); 
  79. //   而不可 print( "%s", str ); 因为 str 是个 string 类
  80. cout << str << endl;
  81. // 注:string 转换 char[]
  82. str = "无聊啊无聊";
  83. strcpy( tagChar, str.c_str() );
  84. printf( "%s/n", tagChar );
  85. // 注:string 转换 CString;
  86. cStr = str.c_str();
  87. // 注:CString 转换 string 
  88. str = string(cStr.GetBuffer(cStr.GetLength()));
  89. // 注:char* 转换 CString
  90. cStr = pChar;
  91. // 注:CString 转换 char*
  92. pChar = cStr.GetBuffer( cStr.GetLength() );
  93. // 注:CString 转换 char[]
  94. strncpy( tagChar, (LPCTSTR)CString, sizeof(tagChar));
  95. // 注:CString 转换 wchar_t*
  96. pWideChar = cStr.AllocSysString();
  97. printf( "%ls/n", pWideChar );
  98. }

C++标准里 string和wstring

在C++标准里定义了两个字符串string和wstring  typedef basic_string string;  typedef basic_string wstring;  ...
  • huangzeyy
  • huangzeyy
  • 2014年11月06日 11:13
  • 29874

std::string和std::wstring声明和用法解释

平时用到string的一些成员函数,但是自己总记不住声明的参数类型和个数,所以特此记载一下。 用到时翻翻查查。最近用string就写了个爬虫程序,把天涯的经济论的前5页帖子爬了一下。全部记录了下来...
  • qq_31209383
  • qq_31209383
  • 2016年01月18日 16:31
  • 1097

关于string与wstring之间的转换

网上这种转换非常多,但基本遇见中文时没有不乱码的,今天做一个简单的总结 wstring转string void funWstrToStr(wstring strw,string& str,UINT...
  • guo1018902817
  • guo1018902817
  • 2016年08月30日 16:36
  • 473

在多线程环境中不要使用string/wstring

    string/wstring是basic_string模板的两个具体的应用,是c++模板库中的精华,我作为一个c++程序员,也特别喜欢这两个类。c++标准要求对于string/wstring的...
  • hello_wyq
  • hello_wyq
  • 2006年07月06日 10:30
  • 5331

wstring的一个小例子

#include   #include   #include   using namespace std; vector  Split(wstring &s) {      wstring::size...
  • jia_xiaoxin
  • jia_xiaoxin
  • 2008年11月10日 15:51
  • 4695

string 与 wstring 的中文互转(zt)

 (zt)随着VS2003升级到VS2005,很多以前熟悉的输入输出方式以及参数传递方式都不再有效(参看 vs2003 到vs2005代码升级要点http://bianyongtao.spaces.l...
  • code_pipeline
  • code_pipeline
  • 2007年11月02日 17:21
  • 3774

string、Ctring、Wstring的区别以及宽字节与多字节的运用

首先我个人认为,在MFC、ATL中使用字符串尽量使用CString,毕竟都是微软的孩子,各方面都比其它更有优势,而在非微软平台上或对移植性要求较高的场合推荐使用string,标准模板库提供了那么强大的...
  • bestone0213
  • bestone0213
  • 2015年09月02日 11:17
  • 1984

几种C++ std::string和std::wstring相互转换的转换方法

几种C++ std::string和std::wstring相互转换的转换方法 第一种方法:调用WideCharToMultiByte()和MultiByteToWideChar(),代码如下(...
  • winnyrain
  • winnyrain
  • 2016年06月30日 13:39
  • 9662

C++ wstring string char* wchar_t相互转换

1. char*->string (1)直接转换 const char* nodename; string temp = nodename;string temp2(nodename); ...
  • u012543266
  • u012543266
  • 2013年12月19日 00:29
  • 8719

error C2039: 'wstring' : is not a member of 'std'(转)

环境:win7 32,vs2010 问题:error C2039: 'wstring' : is not a member of 'std'(转) 解决方法: #include 转自:http...
  • dragoo1
  • dragoo1
  • 2015年04月30日 17:36
  • 2857
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:string 与wstring
举报原因:
原因补充:

(最多只允许输入30个字)