=======================
=======================
=======================
출처: http://myblue0324.tistory.com/118
1. std::string을 std::wstring으로 변환.
- std::string str = "string";
- std::wstring wstr = L"";
- wstr.assign(str.begin(), str.end());
- USES_CONVERSION;
- std::string str = "string";
- std::wstring wstr(A2W(str.c_str()));
2. std::wstring을 std::string으로 변환.
- std::wstring wstr = L"string";
- std::string str = "";
- str.assign(wstr.begin(), wstr.end());
- USES_UTF8_CONVERSION;
- std::wstring wstr = L"string";
- str::string str(W2A(wstr.c_str()));
위의 문자열을 CString형으로 변환하고자 할 경우에는 간단하게 아래와 같이 변경이 가능합니다.
- #ifdef _UNICODE
- std::wstring s = L"string";
- CString str(s.c_str());
- #else
- std::string s = "string";
- CString str(s.c_str());
- #endif
출처: http://myblue0324.tistory.com/118 [나만의 상상력]
=======================
=======================
=======================
출처: https://stackoverflow.com/questions/4804298/how-to-convert-wstring-into-string
As Cubbi pointed out in one of the comments, std::wstring_convert
(C++11) provides a neat simple solution:
wstring string_to_convert; //setup converter using convert_type = std::codecvt_utf8<wchar_t>; std::wstring_convert<convert_type, wchar_t> converter; //use converter (.to_bytes: wstr->str, .from_bytes: str->wstr) std::string converted_str = converter.to_bytes( string_to_convert );
I was using a combination of wcstombs
and tedious allocation/deallocation of memory before I came across this.
http://en.cppreference.com/w/cpp/locale/wstring_convert
update(2013.11.28)
One liners can be stated as so (Thank you Guss for your comment):
std::wstring str = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes("some string");
Wrapper functions can be stated as so: (Thank you ArmanSchwarz for your comment)
wstring s2ws(const std::string& str) { using convert_typeX = std::codecvt_utf8<wchar_t>; std::wstring_convert<convert_typeX, wchar_t> converterX; return converterX.from_bytes(str); } string ws2s(const std::wstring& wstr) { using convert_typeX = std::codecvt_utf8<wchar_t>; std::wstring_convert<convert_typeX, wchar_t> converterX; return converterX.to_bytes(wstr); }
Note: there's some controversy on whether string
/wstring
should be passed in to functions as references or as literals (due to C++11 and compiler updates). I'll leave the decision to the person implementing, but it's worth knowing.
Note: I'm using std::codecvt_utf8
in the above code, but if you're not using UTF-8 you'll need to change that to the appropriate encoding you're using:
http://en.cppreference.com/w/cpp/header/codecvt
=======================
=======================
=======================
출처: http://wendys.tistory.com/40
convert string to wstring
유니코드 환경과 멀티바이 환경이 함께 동작하는 윈도우 환경에선 사용하는 경우에 따라 멀티바이트 스트링을 사용하기도 하고, 유니코드 스트링을 사용하기도 합니다.
이 때, std::string 을 이용하여 아주 간단하게 상호 변환이 가능합니다.
그냥 넣으면 안되나요??
네 안됩니다... 아래와 같이 에러가 납니다
그래서 아래와같은 정상적인 방법을 이용하여 컨버팅을 할 수 있습니다.
멀티바이트 -> 유니코드
{
std::string message_a =
"convert before message"
;
std::wstring message_w;
message_w.assign(message_a.begin(), message_a.end());
wprintf(message_w.c_str());
}
유니코드 -> 멀티바이트
{
std::wstring message_w = L
"convert before message"
;
std::string message_a;
message_a.assign(message_w.begin(), message_w.end());
printf
(message_a.c_str());
}
출처: http://wendys.tistory.com/40 [Hacker N0te]
아주 간단하죠?
assign 이란 대입이라는 의미이며 std::string message = "assign message"와 동일한 기능입니다.
출처: http://wendys.tistory.com/40 [Hacker N0te]
=======================
=======================
=======================
'프로그래밍 관련 > 언어들의 코딩들 C++ JAVA C# 등..' 카테고리의 다른 글
C, C++ 스레드(Thread) 관련 WaitForSingleObject 함수 (0) | 2017.06.15 |
---|---|
[C++] string to int - string에서 int로 변환 (0) | 2017.06.14 |
C++ 멤버변수 static const 관련 등등 (0) | 2017.03.30 |
c++ CRT 라이브러리를 사용하여 메모리 누수 찾기 관련 (0) | 2017.02.21 |
c++ enum보다 향상된 enum class 관련 (0) | 2017.02.20 |
댓글 영역