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++ std::string和std::wstring相互转换的转换方法

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

浅析C++中String到WString的转换

今天心情不好,但是生活还要继续。 那就谈一谈wstring、string以及二者的转换吧!W顾名思义就是Width的缩写,即所谓的“宽”。首先看一下wstring和string分别如何定义的:typ...
  • wangshubo1989
  • wangshubo1989
  • 2015年10月18日 00:24
  • 5794

string和wstring相互转换方法,标准C++做成,可以在Linux、Windows下运行

string 是c++标准库里面其中一个,封装了对字符串的操作  把string转换为char* 有3中方法:  1。data  如:  string str="abc";  char *p...
  • educast
  • educast
  • 2013年04月02日 19:08
  • 6771

String与WString的字符转换代码

  • 2017年11月04日 09:19
  • 1KB
  • 下载

cstring wstring string

  • 2010年10月15日 19:09
  • 2.4MB
  • 下载

wstring转string

  • 2014年10月21日 14:32
  • 433B
  • 下载

string、wstring、cstring、 char、 tchar、int、dword转换方法

  • 2012年04月26日 11:52
  • 10KB
  • 下载

浅析C++中String到WString的转换

今天心情不好,但是生活还要继续。 那就谈一谈wstring、string以及二者的转换吧!W顾名思义就是Width的缩写,即所谓的“宽”。首先看一下wstring和string分别如何定义的:typ...
  • wangshubo1989
  • wangshubo1989
  • 2015年10月18日 00:24
  • 5794

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

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

c++中的char*与wchar_t*与string以及wstring之间的相互转换

本文转自此网址:http://www.jb51.net/article/37627.htm   #ifndef USE_H_ #define USE_H_ #include...
  • lvchakele
  • lvchakele
  • 2014年12月05日 15:11
  • 426
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:string 与wstring
举报原因:
原因补充:

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