멀티바이트
a, b, c등등(1byte)의 아스키코드로만 문자를 다 표현할 수가 없으므로 거기에
다른 여러 문자를 포함한(예를 들어 한글(2byte)) 것을 멀티바이트 문자 집합 이라고 합니다.
a,b,c 1byte
한글 2byte
다른문자 2byte
유니코드
멀티바이트는 1byte는 물론 2byte여러가지 다양하기에 특정 사이트를 들어가면 깨지는 현상을
볼수가 있는데요 (이유는 정확하지 않지만 아마 몇 바이트로 읽을지 모르니 그렇겟죠??)
방안이 유니코드!! 16bit 의 단일한 값으로 지구상의 모든 문자를 표현할 수 있는 문자코드 체계입니다.
그것을 a, b, c든 한글이든 전체적으로 2byte(16bit)로 통일한 것이 유니코드 문자 집합 입니다.
a,b,c 2byte
한글 2byte
다른문자 2byte
유니코드를 지원하려면 C언어 타입을 바로 쓰지 말고 유니코드 설정에 따라 변경되는 중간 타입을
사용해야 합니다.
STR : String 문자열 이라는 뜻
LPSTR : Long Pointer String
LPCSTR : Long Pointer Const String
char를 바로 쓴 소스는 유니코드로 바꿀 때 일일이 소스를 뜯어 고친 후 다시 컴파일해야 하지만
TCHAR라는 중간 타입을 사용한 소스는 프로젝트 설정에 따라 소스도 같이 바뀌는 효과가 있으므로
소스는 그대로 두고 컴파일만 다시 하면 됩니다.
--------=-=-=-=-------------------------------------------=-=-=----------------------
프로그래밍을 처음 접하는 사람들에게 제일 까다로운 것이 문자에 대한 처리가 아닐까 싶다.
int나 float 같이 그냥 막 집어 넣거나 합치고 빼고가 사람 생각하는거 마냥 쉽게 되지 않는다.
게다가 나같이 얕은 지식을 가지고 있는 사람이
뭐 하나 하려면 열려 있는 네이버 블로그 창이... 한가득이다 한가득
이번에는 잘되던 프로그램인데 어디선가 무언가 문제가 생겨서
error C2664: 'atoi' : cannot convert parameter 1 from 'class CString' to 'const char *'
요런 에러들이 생겨났다.
뭐 저 에러도 있었고 내용이 다른 것도 있었지만 어째든 저런 에러 ㅋㅋ
우선 이번 포스팅은 간단히 정리해 보고 넘어가려 한다.
STR : String 문자열 이라는 뜻
LPSTR : Long Pointer String
LPCSTR : Long Pointer Const String
이건 그냥 많이 보이는 것들이니까 우선 정리해 놓고
프로그래밍을 배우면서 접하게 되는 것이 char 이다.
char = 1byte 라고 배우고 한글의 한 글자는 2byte에 담긴다고 배운다.
하지만 처음에는 복잡하고 귀찮아서 한글은 버리게 되는 것 같다.
요러한 처리 방식을 가지는 문자 집합(character set)을 멀티바이트(multi-byte)라 한다.
Unicode 얘는 요즘 점점 많이 사용하는 추세인것 같다.
자바나 C#과 같은 언어들은 기본적으로 유니코드를 사용하고 있다.
wchar_t 는 유니코드를 사용하기 위한 int와 long 형과 같은 차이를 지니고 있다.
wchar_t = 2byte
그러면 TCHAR는 무엇일까?
TCHAR는 멀티바이트 에서는 멀티바이트 방식으로 유니코드 에서는 유니코드 방식으로
문자열을 처리하게 해 주는 매크로 이다.
다음의 소스를 보니 이해가 쉬웠다.
< http://cafe.naver.com/jgcafe/622 : TCHAR, string >
#ifdef _UNICODE
#define TCHAR wchar_t
#else
#define TCHAR char
#endif
사이 사이에 몇줄이 더 있기는 했는데 뺐다.
여하간 저런 식으로 둘간의 스위치를 해 주는 역할이라서
유연한 프로그래밍을 위해서는 문자열 처리를 할때 TCHAR를 사용하는 것이 좋을 것 같다.
더불어 에러를 해결하려 하던중에 내가 변수명을 temp 라고 적었는데
에러에는 Ltemp 라고 자꾸 나오길래 '어? 이상타' 하며 고개를 갸웃 거렸는데
Unicode 에서는 문자열을 사용할때 항상 앞에 L을 붙여서 사용한다고 한다.
< http://blog.naver.com/alonglog/130044427979 : char, wchar_t, TCHAR, CString 클래스 >
< http://blog.naver.com/jangpro1003/90098546315 : char *, LPCSTR, TCHAR 차이 >
< http://blog.naver.com/chizeta/100022303081 : TCHAR 매크로 설명 >
< http://blog.naver.com/pir9562/20031286323 : 문자열의 불편함을 해소하기 위한 TCHAR >
< http://blog.naver.com/picbuddy/80020151178 : CString -> char * 형변환 >
[출처] 유니코드, 멀티바이트|작성자 렐리군
'OLD_posting' 카테고리의 다른 글
L2 ~ L7 스위치 (0) | 2014.07.15 |
---|---|
L2 스위치, L3 스위치, L4 스위치 (0) | 2014.07.15 |
문자열 함수 (멀티바이트->유니코드->TCHAR) (0) | 2014.04.04 |
MySQL 기본 명령어 정리 (0) | 2014.02.27 |
[MFC] 콤보 박스 사용 (0) | 2013.12.02 |