천객만래 [千客萬來] (It has an interminable succession of visitors)

[개발/VC++] 유니코드 버전으로 된 프로젝트에서 CString 를 char* 로 바꾸는 방법





MFC에서 유니코드 버전으로 된 프로젝트에서 CString 를 char* 로 바꾸는 방법은
유니코드 상태에서 CString 을 바로 CHAR* 로 바꾸는 것이 안됩니다.

W2A 나 A2W 로 코드 변환을 하거나 wsprintf(); 함수를 이용 하면 됩니다.

유니코드는 사용 되는 바이트 수가 2바이트이고 1바이트 문자열로 변환하면 깨져 버리는 문자열 들이 있는데  처리를 해야 합니다. 

유니코드를 멀티바이트 코드로 변환 하려면 

char Text[80];
wsprintfA(Text, "%S", L"문자열" );

멀티바이트 코드를 유니코드로 변환 하려면 

WCHAR Text[80];
wsprintfW(Text, L"%S", "문자열" );


변환될 문자열을 %S(대문자)로 wsprintf()함수를 사용합니다.

※ 현재로써는 바로 CString 에서 char*(LPSTR , LPCSTR) 로 변환 할수 없습니다. 

참고로 더 설명을 하면 CString 기본 요소는 CStringBase<WCHAR>  , CStringBase<CHAR> 둘로 나누어집니다.
이 두 클래스 사이에서 바로 입력 변환이 불가능 합니다. 

변환시에는 API 함수로 코드 변환 후에 사용 해야 하며 
CStringBase<CHAR> 로 사용 한다면 유니코드 내에서 ANSI 코드를 사용 할 수 있습니다. 

또 다른 방법의 함수
-----------------------------
CString을 유니코드로

CString tmp("test");
WCHAR m_wPath[MAX_PATH];

wcscpy(wPath,tmp.GetBuffer(0));



Posted by SB패밀리

MFC에서 유니코드 버전으로 된 프로젝트에서 CString 를 char* 로 바꾸는 방법은
유니코드 상태에서 CString 을 바로 CHAR* 로 바꾸는 것이 안됩니다.

W2A 나 A2W 로 코드 변환을 하거나 wsprintf(); 함수를 이용 하면 됩니다.

유니코드는 사용 되는 바이트 수가 2바이트이고 1바이트 문자열로 변환하면 깨져 버리는 문자열 들이 있는데  처리를 해야 합니다.

유니코드를 멀티바이트 코드로 변환 하려면

char Text[80];
wsprintfA(Text, "%s", L"문자열" );

멀티바이트 코드를 유니코드로 변환 하려면

WCHAR Text[80];
wsprintfW(Text, L"%s", "문자열" );


변환될 문자열을 %s(대문자)로 wsprintf()함수를 사용합니다.

※ 현재로써는 바로 CString 에서 char*(LPSTR , LPCSTR) 로 변환 할수 없습니다.

참고로 더 설명을 하면 CString 기본 요소는 CStringBase<WCHAR>  , CStringBase<CHAR> 둘로 나누어집니다.
이 두 클래스 사이에서 바로 입력 변환이 불가능 합니다.

변환시에는 API 함수로 코드 변환 후에 사용 해야 하며 
CStringBase<CHAR> 로 사용 한다면 유니코드 내에서 ANSI 코드를 사용 할 수 있습니다.

또 다른 방법의 함수
-----------------------------
CString을 유니코드로

CString tmp("test");
WCHAR m_wPath[MAX_PATH];

wcscpy(wPath,tmp.GetBuffer(0));

Posted by SB패밀리