在 C++Builder 2007 及更早版本中,TEdit::Text 是用户默认 ANSI 语言环境中的 8 位 AnsiString。将AnsiString 转换为std::string 非常简单——只需使用AnsiString::c_str() 方法获取指向AnsiString 数据的空终止char* 指针,然后您可以将其分配给@ 987654329@,如:
std::string my_str = User->Text.c_str();
/* or:
System::AnsiSystem text = User->Text;
std::string my_str(text.c_str(), text.Length());
*/
如果您希望 std::string 数据采用另一种字符编码,例如 UTF-8,则必须相应地转换 AnsiString 数据,例如使用 MultiByteToWideChar()/WideCharToMultiByte()、@987654335 @等,然后将其分配给std::string。
在 C++Builder 2009 及更高版本中,TEdit::Text 是 UTF-16 格式的 16 位 UnicodeString。将UnicodeString 转换为std::string 的最简单方法是首先转换为AnsiStringT<CP>(其中CP 是所需的ANSI 代码页-AnsiString 使用CP=0,UTF8String 使用CP=65001,等),然后将其转换为std::string,例如:
std::string my_str = AnsiString(User->Text).c_str(); // or UTF8String, etc...
/* or:
System::AnsiString text = User->Text; // or UTF8String, etc...
std::string my_str(text.c_str(), text.Length());
*/
或者,在 C++11 及更高版本中,您可以先将UnicodeString 转换为std::wstring,然后使用std::wstring_convert,例如:
#include <locale>
std::wstring my_wstr = User->Text.c_str();
/* or:
System::UnicodeString text = User->Text;
std::wstring my_wstr(text.c_str(), text.Length());
*/
// System::Char may be either wchar_t or char16_t, depending
// on which platform you are compiling for...
std::string my_str = std::wstring_convert<std::codecvt_utf8_utf16<System::Char>>{}.to_bytes(my_wstr);