본문 바로가기
Engineering

[API]멀티바이트와 유니코드 문자열간 형변환

by 투썬 아빠 2009. 8. 31.




프로그램을 짜다보면 문자열 처리는 크게 멀티바이트와 유니코드 두가지로 나뉜다.

일반적으로 알기로는 영문이 1Byte, 한글 및 특수 문자가 2Byte이다.
이런 문자가 다른 용량을 해결하기 위해 나타난 방안이 유니코드인데......
이 때문에 문자열 처리가 발생하곤 한다.

한 예로 두사람이 서로 통신하는 프로그램을 짤 때,
한 명은 멀티바이트로 프로젝트를 생성하고 한명은 유니코드로 프로젝트를 생성하였다면.....
두 사람 간에는 약간(?)의 스파크가 튀게 될것이다.

이런 좋지 않은 일의 발생을 막을려면
최선의 방법은
프로젝트를 진행 전에 미리 문자열처리에 관해서 충분한 이야기를 나누고
공통된 문자열을 선정하는 것이다.

문자열 처리로 서로 간에 상호보완은 차선책이다.
하지만 필요한 내용이니 간단하게 정리하도록 하겠다.


//함수 및 변수 사용을 위한 include
#include
<atlconv.h>
#include <string>

//멀티바이트 문자열을 유니코드 문자열로 변환
std
::wstring CClientMgr::Multi2Wide( const char* pStr )
{
 int len = -1;
 
 std::wstring wstrOut;
 
 int nChars = MultiByteToWideChar( CP_ACP , 0 , pStr , len , NULL , 0 );
 
 wstrOut.resize( nChars ) ;
 MultiByteToWideChar( CP_ACP , 0 , pStr , len , const_cast<wchar_t*>(wstrOut.c_str()) , nChars ) ;
 
 return wstrOut;
}

//유니코드 문자열을 멀티바이트 문자열로 변환
std
::string CClientMgr::Wide2Multi( const wchar_t* pStr )
{
 std::string strOut;
 int len = -1;
 
  int nChars = WideCharToMultiByte( CP_ACP , 0 ,
  pStr , len , NULL , 0 , NULL , NULL ) ;
 
 strOut.resize( nChars ) ;
 WideCharToMultiByte( CP_ACP , 0 , pStr , len ,
  const_cast<char*>(strOut.c_str()) , nChars , NULL , NULL ) ;
 
 return strOut;
}


wstring, string wchar*와 char*와 동일하게 사용가능하다.

 ex) 멀티바이트로 작성된 프로젝트
LPCTSTR  lpszData = "안녕하세요";                           
// 멀티바이트 문자열
WCHAR Data[100];                                                 // 유니코드 문자배열
std::wstring wstrData = Multi2Wide( lpszData );           // 형 변환
wcscpy( Data, wstrData.c_str() );                             // Data가 배열이기 때문에 strcpy의 WCHAR용을 사용한다.

다양하게 사용하길 바란다...

댓글