标准字符串std::string和System::String, CString之间的转换

悠悠 2022-08-12 14:00 524阅读 0赞
  1. std::string 转成System.String

[csharp] view plain copy

  1. #include
  2. #include
  3. using namespace System;
  4. using namespace std;
  5. int main() {
  6. string str = “test”;
  7. cout << str << endl;
  8. String^ str2 = gcnew String(str.c_str());
  9. Console::WriteLine(str2);
  10. // alternatively
  11. String^ str3 = gcnew String(str.c_str());
  12. Console::WriteLine(str3);

string CBZApiTest::StrToStr(String^ strClr)
{
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(strClr)).ToPointer();
string str = chars;
Marshal::FreeHGlobal(IntPtr((void*)chars));
return str;
}

String^ CBZApiTest::clrStrToStr(string str)
{
return gcnew String(str.c_str());
}

2.

  1. #include <string>
  2. #include <iostream>
  3. using namespace std;
  4. using namespace System;
  5. using namespace System::Runtime::InteropServices;
  6. <span style="color: rgb(255, 0, 0);">//System::String转std::string</span>
  7. void MarshalString ( String* s, string& os ) {
  8. const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
  9. os = chars;
  10. Marshal::FreeHGlobal(IntPtr((void*)chars));
  11. }
  12. <span style="color: rgb(255, 0, 0);">//System::String转std::wstring</span>
  13. void MarshalString ( String* s, wstring& os ) {
  14. const wchar_t* chars = (const wchar_t*)(Marshal::StringToHGlobalUni(s)).ToPointer();
  15. os = chars;
  16. Marshal::FreeHGlobal(IntPtr((void*)chars));
  17. }
  18. <span style="color: rgb(255, 0, 0);">//System::String转std::string
  19. </span><span style="font-size: 12px;">string str = "";
  20. String* s = "abcdef</span><span style="font-size: 12px;">";
  21. </span>const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
  22. str = s;
  23. <span style="color: rgb(255, 0, 0);">//std::wstring</span><span style="color: rgb(255, 0, 0);">转</span><span style="color: rgb(255, 0, 0);">System::String</span><span style="font-size: 12px;">
  24. string str = "abcdef";
  25. String* s;
  26. s = new String(str.c_str());
  27. </span><span style="color: rgb(255, 0, 0);">//System::Stringchar*;
  28. </span><span style="font-size: 12px;">String* s = "abcdef</span><span style="font-size: 12px;">";
  29. char* ch= (char*)(void*)Marshal::StringToHGlobalAnsi(s);
  30. </span><span style="color: rgb(255, 0, 0);">//System::String转char[];
  31. <span style="color: rgb(0, 0, 0);">char ch2[100];
  32. strcpy(ch2,ch);</span></span>

发表评论

表情:
评论列表 (有 0 条评论,524人围观)

还没有评论,来说两句吧...

相关阅读

    相关 char*CString转换

     CString 是一种很特殊的 C++ 对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于 CString 地址之下

    相关 CString,string,char*之间转换

    这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握