如何将WCHAR_T*转换为STD :: String?
题
我更改了班级使用std :: string(根据我得到的答案 这里 但是我有一个函数返回wchar_t *。如何将其转换为STD :: String?
我尝试了:
std::string test = args.OptionArg();
但是它说错误c2440:'初始化':无法从'wchar_t *'转换为'std :: basic_string <_Elem,_traits,_ax>'
解决方案
你可以只使用 wstring
并将所有内容保持在Unicode中
其他提示
wstring ws( args.OptionArg() );
string test( ws.begin(), ws.end() );
您可以使用以下功能将宽字符串转换为ASCII字符串:
#include <locale>
#include <sstream>
#include <string>
std::string ToNarrow( const wchar_t *s, char dfault = '?',
const std::locale& loc = std::locale() )
{
std::ostringstream stm;
while( *s != L'\0' ) {
stm << std::use_facet< std::ctype<wchar_t> >( loc ).narrow( *s++, dfault );
}
return stm.str();
}
请注意,这只会替换任何与等效ASCII字符不存在的宽字符 dfault
范围;它不会从UTF-16转换为UTF-8。如果要转换为UTF-8,请使用库 ICU.
这是一个古老的问题,但是如果是这种情况,您并不是真正寻求转换,而是使用Mircosoft的TCHAR东西来构建ASCII和Unicode,您可能会记得STD :: String确实是
typedef std::basic_string<char> string
因此,我们可以定义自己的Typedef,说
#include <string>
namespace magic {
typedef std::basic_string<TCHAR> string;
}
那你可以使用 magic::string
和 TCHAR
, LPCTSTR
, ,等等
只是为了好玩 :-):
const wchar_t* val = L"hello mfc";
std::string test((LPCTSTR)CString(val));
以下代码更简洁:
wchar_t wstr[500];
char string[500];
sprintf(string,"%ls",wstr);
不隶属于 StackOverflow