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

wstring的一个小例子

#include   #include   #include   using namespace std; vector  Split(wstring &s) {      wstring::size...

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

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

boost生成和解析json实例及定向到文件

生成: // test.cpp #include #include #include #include #include using namespace std; using namesp...

Boost库问题:无法识别的外部符号……

问题今天在用Qt可视化CGAL生成的图像的编程过程中遇到以下问题: 只要include了CGAL的头文件或者Boost库的头文件,编译就会出现“无法识别的外部符号”,“无法识别的外部命令”等错误。如...

String与WString的字符转换代码

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

wstring转string

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

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

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

cstring wstring string

  • 2010年10月15日 19:09
  • 2.4MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:string 与wstring
举报原因:
原因补充:

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