如何在C ++ Builder中将AnsiString转换为std :: string?

问题描述 投票:0回答:2

我想问一下如何从TEdit控件中获取文本输入并将其转换为std::string(不是AnsiString)。

例如,如果我有一个名称为TEditUser控件,则可以使用User->Text命令从中获取文本。我想要做的就是将该值分配给std::string,例如string my_str = User->Text;

我想问一下,如何在C ++ Builder中做到这一点?是否存在某种ToString()方法或某种方法,因为我无法找到一种。

string text casting edit c++builder
2个回答
1
投票

在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使用AnsiStringCP=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

0
投票

我有很多人要从Borland迁移到Embarcadero Rio。因此,我创建了一种方法来进行此操作。

std::wstring_convert
© www.soinside.com 2019 - 2024. All rights reserved.