Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在C++;建设者_String_Text_Casting_Edit_C++builder - Fatal编程技术网

String 如何在C++;建设者

String 如何在C++;建设者,string,text,casting,edit,c++builder,String,Text,Casting,Edit,C++builder,我想问一下如何从TEdit控件获取文本输入并将其转换为std::string(而不是AnsiString) 例如,如果我有一个名为User的TEdit控件,我将使用User->text命令从中获取文本。我想做的是将该值赋给std::string,例如string my_str=User->Text 我想问一下,我怎么能在C++ Builder中做到这一点呢?是否存在某种类型的ToString()方法或某种类型,因为我找不到。在C++Builder 2007及更早版本中,TEdit::Text是用

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

例如,如果我有一个名为
User
TEdit
控件,我将使用
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()
方法获取指向
AnsiString
数据的以null结尾的
char*
指针,然后可以将其分配给
std::string
,例如:

std::string my_str=User->Text.c_str();
/*或:
系统::AnsiSystem text=用户->文本;
std::string my_str(text.c_str(),text.Length());
*/
如果希望
std::string
数据采用另一种字符编码,如UTF-8,则在将其分配给
std::string
之前,必须相应地转换
ansisting
数据,如使用
multibytetowidechart()
UTF8Encode()


在C++Builder 2009及更高版本中,
TEdit::Text
是一种UTF-16格式的16位
UnicodeString
。将
UnicodeString
转换为
std::string
最简单的方法是首先转换为
AnsiStringT
(其中
CP
是所需的ANSI代码页-
AnsiString
使用
CP=0
UTF8String
使用
CP=65001
,等等),然后将其转换为
std::string
,例如:

std::string my_str=AnsiString(用户->文本).c_str();//或UTF8字符串等。。。
/*或:
系统::AnsiString text=User->text;//或UTF8字符串等。。。
std::string my_str(text.c_str(),text.Length());
*/
或者,在C++11及更高版本中,您可以先将
UnicodeString
转换为
std::wstring
,然后使用,例如:

#包括
std::wstring my_wstr=User->Text.c_str();
/*或:
系统::Unicode解压文本=用户->文本;
std::wstring my_wstr(text.c_str(),text.Length());
*/
//System::Char可以是wchar\u t或char16\u t,具体取决于
//您正在哪个平台上编译。。。
std::string my_str=std::wstring_将{}转换为_字节(my_wstr);

我有很多这样的东西要从博尔兰迁移到英巴卡德罗里约。所以我创建了一个方法来实现它

#include <cwchar.h>   //std::wcslen

char* __fastcall AnsiOf(wchar_t* w)
{
 static char c[STR_CONV_BUF_SIZE];
 memset(c, 0, sizeof(c));
 WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, w, std::wcslen(w), c, STR_CONV_BUF_SIZE, NULL, NULL);
 return c;
}

std::string my_str = AnsiOf((User->Text).c_str());
#包括//std::wcslen
字符*快速调用AnsiOf(wchar\U t*w)
{
静态字符c[STR_CONV_BUF_SIZE];
memset(c,0,sizeof(c));
宽图表多字节(CP\u ACP、WC\u NO\u最佳匹配字符、w、std::wcslen(w)、c、STR\u CONV\u BUF\u大小、NULL、NULL);
返回c;
}
std::string my_str=AnsiOf((用户->文本).c_str());

可能使用User->Text.c_str(),这是IIRC AnsiString和UnicodeString都应该具备的功能。您使用的是哪个版本?可能是