본문 바로가기
Program/C++ MFC

[C++ MFC] CString int 형변환 방법 / _atoi() 함수 _ttoi() 함수 차이

by 냠만 2024. 6. 9.

[함수 종류]

MFC에서 형변환을 할 때 주로 사용되는 함수입니다.  atoi와 ttoi는 모두 문자열을 int변수로 형변환을 진행해 주는 함수입니다. 이외에도 atof ttof wtoi atoi wtoi_l 등등 여러 가지가 있습니다.

 

변경 전 받는 인자 변경 후 함수 필요 헤더 비고
CString, char CString, char* int atoi <stdlib.h> ANSI
wchar_t wchar_t* int  _wtoi <stdlib.h> 또는 <wchar.h> UNICODE
char char*
_locate_t
int _atoi_l <stdlib.h> 또는 <wchar.h>  
wchar_t char*
_locate_t
int _wtoi_l <stdlib.h> 또는 <wchar.h>  
CString CString int _ttoi <stdlib.h> UNICODE
CString CString double _ttof <stdlib.h>  
TCHAR char* double _ttof <stdlib.h>  
TCHAR char[] double _ttof <stdlib.h>  
CString CString LPWSTR (LPWSTR)(LPCWSTR)CString <stdlib.h>  

표에 나온것 이외에도 함수가 많은데 int나 double 알고 있으면 웬만하면 쓸 일이 없기 때문에 따로 정리는 안 했습니다.

 

[멀티바이트와 유니코드]

C++에서는 문자 집합이 유니코드와 멀티바이트로 나눠집니다.

일반 문자는 멀티바이트이고, L형사가 붙은 문자는 유니코드로 표현합니다.

멀티바이트는 다국어를 처리하기 전 1byte(싱글바이트)로 사용했는데 중국어나 일본어 한국어 같은 언어들이 1byte로 표기가 불가능하여 2byte를 할당하게 되어 생겨난 이론입니다.

유니코드는 싱글이다 멀티다 나누기 귀찮으니 그냥 모든 문자를 2byte로 표기한 걸 의미합니다.
쓸데없이 왜 나눴는지 모르겠습니다. 그냥 만국공통어 영어 쓰면 해결되는데 말입니다.

 

따라서 문자열 (CString)을 int로 바꿀 경우 멀티바이트일 경우 atoi를 사용하면 되고, 유니코드일 경우 _ttoi나 _wtoi를 사용하면 됩니다.

그러나 일반적으로 MFC를 프로그래밍하는 경우 _atoi보다 _ttoi함수를 권장한다고 합니다. _ttoi의 경우 멀티바이트냐 유니코드냐에 따라 _atoi, _wtoi로 각각 자동 변환해 준다 합니다. 문자열을 표기할 때 TCHAR를 사용하는 이유도 멀티바이트냐 유니코드냐에 따라 char, wchar_t로 각각 자동으로 변환하기 때문이라 합니다.

 

 

[CString int 형변환]

CString에서 int로 형변환 하는 경우

cstringValue.format(_T("%d"), intValue);

 

int에서 CString으로 형변환 하는 경우

intValue = _ttoi(cstringValue);