简体   繁体   中英

Cleaner way to convert from CStringW to std::string?

I figured out a somewhat convoluted way to convert a CStringW to a std::string , but I was wondering if there's a cleaner way than:

CStringW cwstr;
std::wstring stdwstr = cwstr;
std::string stdstr = CW2T(stdwstr.c_str());

You can cut out the intermediate std::wstring :

CStringW cwstr;
std::string stdstr = CW2A(cwstr);

Also note that you want the CW2A macro for correctness. CW2T converts to a TCHAR string, so the code you posted would only compile for an ANSI build (where TCHAR is char ).

std::string str = CStringA( cwstr );

任务完成。

std::string has the following constructor:

template<class InputIterator> string (InputIterator begin, InputIterator end);

So you could use it:

CStringW cwstr;
std::string x( &cwstr.GetString()[0], &cwstr.GetString()[cwstr.GetLength()] );

Implicit convertion wchar_t to char will take place.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM