카테고리 없음
유니코드, ANSI 문자열 변환,MultiByteToWideChar,USES_CONVERSION,WideCharToMultiByte,strcpy
안녕1999
2020. 4. 11. 23:29
윈도우7부터는 유니코드가 기본 문자코드가 되었다.
유니코드 운영체제에서도 ANSI프로그램이 잘 동작하나, 영문 윈도우 같은 경우에는 ANSI 한글이 깨져서 보이는 경우가 종종 있다.
우분투등에서 와인과 같은 기능을 사용하여, 윈도우 프로그램을 실행할 수 도 있으나, ANSI한글이 깨지는 문제가 있다.
1) USES_CONVERSION, A2W(s)
2) MultiByteToWideChar, WideCharToMultiByte
USES_CONVERSION 같은 경우에는 간단하기는 하지만, 내부가 어떻게 동작하는지 알기가 어렵다.
(코드가 커지는지, 느려지는지, 메모리를 많이 사용하는지, 등등..)
C++언어에 맞게 strcpy함수 호출로, 자동으로 형변환이 이루어지도록 해봤다.
C언어를 주로 사용하는 사람들에게 가장 좋은 방법일듯 하다.
단, 형변환이 제대로 되는지, 가끔은 확인이 필요하다.
단점으로는 TCHAR를 사용하고, ANSI로만 컴파일할 경우, 불필요한 복사가 발생한다.
(입력데이터와 버퍼가 명시적으로 달라서...)
void strcpy(wchar_t *buf,char *s)
{
int nLen = MultiByteToWideChar(CP_ACP,
0,
s, -1,
NULL,
NULL);
MultiByteToWideChar(CP_ACP,
0,
s, -1,
buf,
nLen);
}
void strcpy(char *buf,wchar_t *s)//max=1024
{
if(buf)if(s)
{
WideCharToMultiByte(CP_ACP,
0,
s, -1,
buf,1024,
NULL,
NULL);
}
}
void strcat(wchar_t *buf,char *s)
{
if(buf)if(s)
{
while(*buf)buf++;
int nLen = MultiByteToWideChar(CP_ACP,
0,
s, -1,
NULL,
NULL);
MultiByteToWideChar(CP_ACP,
0,
s, -1,
buf,
nLen);
}
}
void strcat(char *buf,wchar_t *s)//max=1024
{
if(buf)if(s)
{
WideCharToMultiByte(CP_ACP,
0,
s, -1,
buf,1024,
NULL,
NULL);
}
}