반응형
개발을 하다보면 멀티바이트 유니코드 변환을 해줘야하는 경우가 너무나도 많다. 프로젝트가 멀티바이트로 만들어져있는 경우에 유니코드 문자열을 처리해야한다면 변환을 해야하고, 소켓 통신을 할때는 멀티바이트 형태를 사용해서 또 변환을 해줘야하는 경우도있다. 데이터를 받는쪽이 중국이나 일본, 헝가리일 경우에도 변환을 해서 패킷을 보내주어야한다. 그렇지 않을경우에는 데이터 수신자는 깨져있는 데이터를 받아 처리하게 된다.
#1번째
USES_CONVERSION;
// 1번
std::wstring wstr = "UNICODE";
// UNICODE -> MULTIBYTE
std::string str;
str.assign(wstr.begin(), wstr.end());
// MULTIBYTE -> UNICODE
std::wstring wwstr;
wwstr.assign(str.begin(), str.end());
#2번째
USES_CONVERSION;
// 2번
std::wstring wstr = "UNICODE";
// UNICODE -> MULTIBYTEz
CW2A cw2a(wstr.c_str());
std::string a_str = cw2a;
// MULTIBYTE -> UNICODE
CA2W ca2w(a_str.c_str());
std::wstring w_str = ca2w;
3번째
USES_CONVERSION;
// 3번
WCHAR *pszWCHAR = NULL;
pszWCHAR = new WCHAR[Arg6*2];
wmemcpy(pszWCHAR, Arg5, Arg6);
int nSize = WideCharToMultiByte(CP_UTF8, 0, pszWCHAR, -1, NULL, 0, NULL, NULL);
char *pszCHAR = NULL;
pszCHAR = new char[nSize];
WideCharToMultiByte(CP_UTF8, 0, pszWCHAR, -1, pszCHAR, nSize, NULL, NULL);
delete []pszWCHAR;
delete []pszCHAR;
4번째
USER_CONVERSION
// 4번
// WCHAR -> CHAR 변환
std::wstring wstr = "UNICODE";
char *pszChar= NULL;
int nBytes = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL);
pszChar = (char*)malloc(sizeof(char) * nBytes + 1);
memset(pszChar, 0x00, nBytes + 1);
strncpy(pszChar, W2A(wstr.c_str()), nBytes);
// CHAR -> WCHAR 변환
wchar_t *pszWchar = NULL;
nBytes = MultiByteToWideChar(CP_ACP, 0, pszChar, strlen(pszChar), NULL, 0);
pszWchar = (wchar_t *)malloc(sizeof(wchar_t) * nBytes + 1);
memset(pszWchar, 0x00, nBytes + 1);
wcsncpy(pszWchar, A2W(pszChar), nBytes);
free(pszChar);
free(pszWchar);
반응형
'훈, IT 공부 > C,C++,MFC' 카테고리의 다른 글
C/C++ IPropertyStore / 파일 속성 모두 얻어오기 .doc .docs .xlsx .pptx (0) | 2022.08.11 |
---|---|
[VS에러] 함수에서 참조되는 확인할 수 없는 외부기호 LNK1120, LNK2019 (6) | 2021.01.14 |
C++ PCRE 정규식 라이브러리 사용해서 정규표현식 사용하기 (2) | 2020.04.08 |
Library, DetourCreateProcessWithDll() 함수 (6) | 2019.09.17 |
Visual Studio 2008 - fatal error C1859 미리 컴파일된 헤더에서 예기치 않은 오류가 발생했습니다. 컴파일러를 다시 실행하면 이 문제를 해결할 수 있습니다. (6) | 2019.06.17 |
댓글