1. std::string,std::wstring與System::String^轉換
1 /** \class sidle::StrHelper
2 \brief std::string,std::wstring與System::String^轉換
3 \author 吳爾平
4 \version 1.0
5 \date 2006.03.20 -
6 \bug
7 \warning
8 */
9
10 namespace sidle
11 {
12 using namespace std;
13 using namespace System;
14 using namespace System::Text;
15
16 class StrHelper
17 {
18 public:
19 static String^ Str2Refstr(const std::string& src)
20 {
21 return gcnew String(src.c_str());
22 }
23
24 static String^ Wstr2Refstr(const std::wstring& src)
25 {
26 return gcnew String(src.c_str());
27 }
28
29 static std::wstring Refstr2wstr(String^ src)
30 {
31 pin_ptr<wchar_t> p = &(src->ToCharArray()[0]);
32 return std::wstring(p);
33 }
34
35 static std::string Refstr2str(String^ src)
36 {
37 //cli::array<Byte>^ buf = UnicodeEncoding::Convert(UnicodeEncoding::Unicode, UnicodeEncoding::GetEncoding("gb2312"),
38 // Encoding::Unicode->GetBytes(src));
39 cli::array<Byte>^ buf = Encoding::GetEncoding("gb2312")->GetBytes(src);
40 pin_ptr<Byte> p = &(buf[0]);
41 return std::string((char*)p);
42 }
43 };
44 }
45
46 void test_RefString_String()
47 {
48 using namespace sidle;
49 assert(StrHelper::Str2Refstr("中文str") == "中文str");
50 assert(StrHelper::Wstr2Refstr(L"中文wstr") == "中文wstr");
51 assert(StrHelper::Refstr2str("中文str") == string("中文str"));
52 assert(StrHelper::Refstr2wstr("中文wstr") == wstring(L"中文wstr"));
53 }