본문 바로가기
프로그래머의 길/C & C++

API를 이용한 ASCII와 UNICODE변환및 코드페이지를 이용한 변환방법

by 제이콥케이 2008. 4. 21.
반응형

=========================================================

API를 이용한 ASCII UNICODE의 변환방법

=========================================================

 

//////////////////////////////////////////////////
//
문자열을 유니코드 문자열(wide-character)로 매핑한다.
//
//
이 함수에 의해 매핑되는 문자열은 multibyte character set으로 부터 반드시 유래하는 건 아니다.
//////////////////////////////////////////////////

 

int MultiByteToWideChar (
  UINT CodePage,         // code page
  DWORD dwFlags,         // character-type options
  LPCSTR lpMultiByteStr, // string to map
  int cbMultiByte,       // number of bytes in string
  LPWSTR lpWideCharStr,  // wide-character buffer
  int cchWideChar        // size of buffer
);

 

CodePage :
   [in]
변환 수행에 사용될 code page를 기술한다.
       
이 파라메타는 설치되거나 또는 시스템에 유효한 어떤한 코드페이지가 될수 있다.

        또는 아래에 기술된 값중 하나를 기술할 수 있다.
        
   CP_ACP  : ANSI
코드 페이지
   CP_MACCP  : Macintosh
코드 페이지
   CP_OEMCP : OEB
코드 페이지
    
lpMultiByteStr :
   [in]
변환 되어질 문자열 스트링 포인터


cbMultiByte
   [in] lpMultiByteStr
파라메타에 의해 포인트된 문자열의 바이트 사이즈

 

lpWideCharStr
   [out]
변환된 문자열을 수신할 버퍼 포인터

 

cchWideChar
   [in] wide character
, lpWideCharStr파라메타에 의해 포인트된 버퍼의 크기
       
만약 이값이 0이면, 이함수는 wide character로 요구되어진 buffer size를 반환한다,
       
그리고 lpWideCharStr 버퍼의 사용을 하지 않는다.

ASCII ==> UNICODE 변환방법

  // sTime이란 ANSI 무낮열을 bstr이란 이름의 유니코드(BSTR타입) 변수로 변환

  char sTime[] = '유니코드 변환 예제';

  BSTR bstr;

  // sTime을 유니코드로 변환하기에 앞서 먼저 그것의 유니코드에서의 길이를 알아야 한다.
  int nLen = MultiByteToWideChar(CP_ACP, 0, sTime, lstrlen(sTime), NULL, NULL)

  // 얻어낸 길이만큼 메모리를 할당한다.
  bstr = SysAllocStringLen(NULL, nLen);

  // 이제 변환을 수행한다.
  MultiByteToWideChar(CP_ACP, 0, sTime, lstrlen(sTime), bstr, nLen);

 

UNICODE ==> ASCII 변환방법

   // newVal이란 BSTR 타입에 있는 유니코드 문자열을 sTime이라는 ANSI 문자열로 변환

   char sTime[128];

 WideCharToMultiByte(CP_ACP, 0, newVal, -1, sTime, 127/*원래크기보다 1작게*/, NULL, NULL); 

반응형