카테고리 없음 string / wstring 변환 좋은날 2008. 1. 24. 13:31 string(multi-byte string)과 wstring(wide-char string)을 상호 변환하는 방법을 알아보자. 보통 mbstowcs와 wcstombs 함수를 사용하거나 윈도우즈 환경에서는 MultiByteToWideChar와 WideCharToMuliByte 함수를 사용해서 구현하는데 여기서는 STL의 codecvt를 사용해서 구현했다. (codecvt는 문자를 인코딩하는데 사용된다. ) multi-byte string을 wide-char string으로 변환하는 코드 (Language : cpp) (Language : cpp)std::wstring mbs_to_wcs(std::string const& str, std::locale const& loc = std::locale()){ typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_t; codecvt_t const& codecvt = std::use_facet<codecvt_t>(loc); std::mbstate_t state = 0; std::vector<wchar_t> buf(str.size() + 1); char const* in_next = str.c_str(); wchar_t* out_next = &buf[0]; codecvt_t::result r = codecvt.in(state, str.c_str(), str.c_str() + str.size(), in_next, &buf[0], &buf[0] + buf.size(), out_next); return std::wstring(&buf[0]);} wide-char string을 multi-byte string으로 변환하는 코드 (Language : cpp) std::string wcs_to_mbs(std::wstring const& str, std::locale const& loc = std::locale()){ typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_t; codecvt_t const& codecvt = std::use_facet<codecvt_t>(loc); std::mbstate_t state = 0; std::vector<char> buf((str.size() + 1) * codecvt.max_length()); wchar_t const* in_next = str.c_str(); char* out_next = &buf[0]; codecvt_t::result r = codecvt.out(state, str.c_str(), str.c_str() + str.size(), in_next, &buf[0], &buf[0] + buf.size(), out_next); return std::string(&buf[0]);} 사용 예 (Language : cpp) // 전역 locale 설정std::locale::global(std::locale("")); std::string mbs1 = "abcdef가나다라";std::wstring wcs1 = L"abcdef가나다라";std::string mbs2 = wcs_to_mbs(wcs1);assert(mbs1 == mbs2);std::wstring wcs2 = mbs_to_wcs(mbs1);assert(wcs1 == wcs2); 출처 : http://cpplog.tistory.com/19 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기Make you feel cozy