Game !

 

 

MultiByteToWideChar 함수가

무엇인지 이해하고 사용해보자!

 

 

 

MultiByteToWideChar 함수

 

이 함수는 ANSI 문자열에서 유니코드로의 변환이 필요할 때 사용합니다

 

*****

ANSI 문자열 : 아마도 아스키코드로 입력된 문자열 => MultiByte

유니코드 : 사용중인 플랫폼, 프로그램, 언어에 관계없이 문자마다 고유한 숫자를 제공 => WideChar

*****

 

함수의 원형

INT

MultiByteToWideChar ( _In_ UINT

CodePage, //변환할 O/S의 코드페이지, 주로 CP_ACP를 사용

_In_ DWORD dwFlags, //어떤 char 형태로할 변환할 것인지 _In_ LPCSTR lpMultiByteStr, //유니코드로 변환할 문자열 포인터 _In_      

INT

   cbMultiByte, //

유니코드로 변환할 문자열의 길이

_Out_opt_ LPWSTR lpWideCharStr, //변환된 문자열을 저장할 버퍼의 포인터 _In_      

INT

   cchWideChar //

변환된 문자열을 저장할 버퍼의 길이

);

 

 

 

사용예시 )

 

 

Image* img;

char* fileName = "겨울동화룰루.png";

 

WCHAR file[MAX_PATH];

MultiByteToWideChar(CP_ACP, NULL, fileName, -1, file, MAX_PATH);

 

img = Image::FromFile(file);

 

 

cf.

gdi+ 에서  Image::FromFile 함수를 사용할 때

그대로  "겨울동화룰루.png" 를 넣고싶으면

 

Image::FromFile(L"겨울동화룰루.png");

L 을 붙여줘야한다 

 

/////////////////////////////////////////////////////////////////////////////////////

 

WCHAR  : 16bit 유니코드 char

 

MAX_PATH : 드라이브, 폴더경로, 파일명, 널문자까지 합한 최대길이 (260)

 

함수예시에서 문자열의 길이인데 -1 을 사용한 이유 :

 

이 파라미터가 -1이면, 기능은 널 종료 문자를 포함하는 전체 입력 스트링을 처리한다. 따라서, 생성 된 유니 코드 문자열은 널 종료 문자를 갖고, 함수에 의해 리턴 된 길이는이 문자를 포함한다.

출처 - MSDN

 

 

즉, 문자열에는 \0 이라는 널문자가 저장되는데, 그것을 만날때까지의 전체 길이를 처리한다는 의미