这篇文章演示了字符串之间的转换使用如:
1. String转为ansi char
2. String转为std::string
3. ansi char转为String
4. std::string 转为String
#pragma
once
#include < vcclr.h >
#include < atlstr.h >
#include < stdio.h >
# using < mscorlib.dll > // Marshal::StringToHGlobalAnsi
using namespace System::Runtime::InteropServices; // Marshal::StringToHGlobalAnsi
# using < system.windows.forms.dll >
#undef MessageBox // avoid error C2653 'MessageBoxA': is not a class or namespace name
using namespace std;
#include < string >
namespace ttttt
... {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/**//// <summary>
/// Summary for Form1
///
/// WARNING: If you change the name of this class, you will need to change the
/// 'Resource File Name' property for the managed resource compiler tool
/// associated with all .resx files this class depends on. Otherwise,
/// the designers will not be able to interact properly with localized
/// resources associated with this form.
/// </summary>
public __gc class Form1 : public System::Windows::Forms::Form
...{
public:
Form1(void)
...{
InitializeComponent();
}
void String2Ansichar(char* strdst,String* strSrc)
...{
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(strSrc).ToPointer());
strcpy(strdst,chars);
Marshal::FreeHGlobal(System::IntPtr((void*)chars));
}
void String2string(std::string& strdst,String*strSrc)
...{
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(strSrc).ToPointer());
strdst = chars;
Marshal::FreeHGlobal(System::IntPtr((void*)chars));
}
protected:
void Dispose(Boolean disposing)
...{
if (disposing && components)
...{
components->Dispose();
}
__super::Dispose(disposing);
}
private:
/**//// <summary>
/// Required designer variable.
/// </summary>
System::ComponentModel::Container * components;
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void)
...{
//
// Form1
//
this->AutoScaleBaseSize = System::Drawing::Size(6, 14);
this->ClientSize = System::Drawing::Size(292, 266);
this->Name = S"Form1";
this->Text = S"Form1";
this->Load += new System::EventHandler(this, Form1_Load);
}
private: System::Void Form1_Load(System::Object * sender, System::EventArgs * e)
...{
//把ansi char 转为 String
char test1[50] = ...{"abcdefg"};
String* pStr = test1;
MessageBox::Show(pStr, "测试字符转换",MessageBoxButtons::OK, MessageBoxIcon::Information);
String* pStr2 = new String("123456789");
//把String 转为 ansi char
char test2[50] = ...{""};
String2Ansichar(test2,pStr2);
MessageBox::Show(test2, "测试字符转换",MessageBoxButtons::OK, MessageBoxIcon::Information);
//把String转为std::string
std::string test3 = "";
String2string(test3,pStr2);
MessageBox::Show(test3.c_str(), "测试字符转换",MessageBoxButtons::OK, MessageBoxIcon::Information);
//如何获取String的第一个字符串
int first = pStr->Chars[0];
sprintf(test2,"%d",first);
MessageBox::Show(test2, "测试字符转换",MessageBoxButtons::OK, MessageBoxIcon::Information);
}
};
}
#include < vcclr.h >
#include < atlstr.h >
#include < stdio.h >
# using < mscorlib.dll > // Marshal::StringToHGlobalAnsi
using namespace System::Runtime::InteropServices; // Marshal::StringToHGlobalAnsi
# using < system.windows.forms.dll >
#undef MessageBox // avoid error C2653 'MessageBoxA': is not a class or namespace name
using namespace std;
#include < string >
namespace ttttt
... {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/**//// <summary>
/// Summary for Form1
///
/// WARNING: If you change the name of this class, you will need to change the
/// 'Resource File Name' property for the managed resource compiler tool
/// associated with all .resx files this class depends on. Otherwise,
/// the designers will not be able to interact properly with localized
/// resources associated with this form.
/// </summary>
public __gc class Form1 : public System::Windows::Forms::Form
...{
public:
Form1(void)
...{
InitializeComponent();
}
void String2Ansichar(char* strdst,String* strSrc)
...{
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(strSrc).ToPointer());
strcpy(strdst,chars);
Marshal::FreeHGlobal(System::IntPtr((void*)chars));
}
void String2string(std::string& strdst,String*strSrc)
...{
const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(strSrc).ToPointer());
strdst = chars;
Marshal::FreeHGlobal(System::IntPtr((void*)chars));
}
protected:
void Dispose(Boolean disposing)
...{
if (disposing && components)
...{
components->Dispose();
}
__super::Dispose(disposing);
}
private:
/**//// <summary>
/// Required designer variable.
/// </summary>
System::ComponentModel::Container * components;
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
void InitializeComponent(void)
...{
//
// Form1
//
this->AutoScaleBaseSize = System::Drawing::Size(6, 14);
this->ClientSize = System::Drawing::Size(292, 266);
this->Name = S"Form1";
this->Text = S"Form1";
this->Load += new System::EventHandler(this, Form1_Load);
}
private: System::Void Form1_Load(System::Object * sender, System::EventArgs * e)
...{
//把ansi char 转为 String
char test1[50] = ...{"abcdefg"};
String* pStr = test1;
MessageBox::Show(pStr, "测试字符转换",MessageBoxButtons::OK, MessageBoxIcon::Information);
String* pStr2 = new String("123456789");
//把String 转为 ansi char
char test2[50] = ...{""};
String2Ansichar(test2,pStr2);
MessageBox::Show(test2, "测试字符转换",MessageBoxButtons::OK, MessageBoxIcon::Information);
//把String转为std::string
std::string test3 = "";
String2string(test3,pStr2);
MessageBox::Show(test3.c_str(), "测试字符转换",MessageBoxButtons::OK, MessageBoxIcon::Information);
//如何获取String的第一个字符串
int first = pStr->Chars[0];
sprintf(test2,"%d",first);
MessageBox::Show(test2, "测试字符转换",MessageBoxButtons::OK, MessageBoxIcon::Information);
}
};
}