我想问一下如何从TEdit
控件中获取文本输入并将其转换为std::string
(不是AnsiString
)。
例如,如果我有一个名称为TEdit
的User
控件,则可以使用User->Text
命令从中获取文本。我想要做的就是将该值分配给std::string
,例如string my_str = User->Text;
。
我想问一下,如何在C ++ Builder中做到这一点?是否存在某种ToString()
方法或某种方法,因为我无法找到一种。
在C ++ Builder 2007和更早版本中,TEdit::Text
是用户的默认ANSI语言环境中的8位AnsiString
。将AnsiString
转换为std::string
非常简单-只需使用AnsiString::c_str()
方法来获取指向char*
数据的以空终止的AnsiString
指针,然后可以将其分配给[ C0],例如:
std::string
[如果您希望std::string my_str = User->Text.c_str();
/* or:
System::AnsiSystem text = User->Text;
std::string my_str(text.c_str(), text.Length());
*/
数据采用其他字符编码,例如UTF-8,则必须相应地转换std::string
数据,例如使用AnsiString
/ MultiByteToWideChar()
,WideCharToMultiByte()
等等,然后再将其分配给UTF8Encode()
。
在C ++ Builder 2009和更高版本中,std::string
是UTF-16格式的16位TEdit::Text
。将UnicodeString
转换为UnicodeString
的最简单方法是先转换为std::string
(其中AnsiStringT<CP>
是所需的ANSI代码页-CP
使用AnsiString
,CP=0
使用UTF8String
,等等),然后将其转换为CP=65001
,例如:
std::string
或者,在C ++ 11和更高版本中,您可以先将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());
*/
转换为UnicodeString
,然后使用std::wstring
,例如:
std::wstring_convert
我有很多人要从Borland迁移到Embarcadero Rio。因此,我创建了一种方法来进行此操作。
std::wstring_convert