Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

zyeon's 작심삼일 코딩 공부

문자 자료형 wchar_t 본문

c++ 정리

문자 자료형 wchar_t

젼뀨 2024. 6. 28. 02:04

char

문자 자료형 char은 아스키코드에 대응하는 문자를 저장하며, 1바이트 크기를 가지고 있다.

char은 -128 ~ 127을 나타낼 수 있지만 아스키코드는 0 ~ 127에 대응하는 문자만을 가지고 있는데,

아스키코드 범위를 제외한 수는 정수로써만 표현이 된다.

 

그럼 한글과 같은 문자는 어떻게 저장할까?

한글의 조합 수를 생각해보면 8비트만으로 모든 한글을 대응하긴 힘든 것을 알 수 있다.

따라서 비주얼스튜디오 기준으로 한글은 2바이트 크기로 나타낸다.

char s[10] = "abc한글";
int sLen = strlen(s);     // 7 출력

위 코드처럼 문자열에 저장을 하게 되면 '한'과 '글'은 1바이트 크기의 인덱스를 2개 사용하게 된다.

우리는 다섯 글자를 썼다고 생각하지만 실제론 일곱 글자를 사용한 것과 마찬가지인 것이다.

 

이처럼 1바이트로 표현하기 힘든 문자는 멀티 바이트를 사용한다.

하지만 멀티 바이트는 호환성이 떨어져 문자가 깨질 위험이 있다.


wchar_t

이 문제를 해결하려면 크기가 2바이트인 문자 자료형 wchar_t을 사용하면 된다. wchar_t는 다양한 문자 집합들을 통합한 유니코드를 사용한다.

wchar_t wc[10] = L"abc한글";
int wcLen = wcslen(wc);      // 5 출력

wchar_t를 사용할 땐 위와 같이 따옴표 앞에 L을 붙여야 한다. 

문자열 관련 함수들을 사용하고 싶다면 strlen(), wcslen() 와 같이 str 대신 wcs을 붙여주면 된다. 

 

사용할 때 wchar 헤더를 무조건 참조해야하는 줄 알았는데 비주얼스튜디오에서 참조를 안해도 작동했다.

챗gpt에 물어보니 비주얼스튜디오가 특정 헤더 파일을 자동으로 포함할 수도 있다고 한다.

그래도 코드의 이식성과 안정성을 높이기 위해 헤더 파일을 명시적으로 포함시키는 습관을 높이는게 좋다.

'c++ 정리' 카테고리의 다른 글

new delete  (0) 2024.08.09
동적할당 malloc()  (0) 2024.07.02
void 포인터  (0) 2024.06.21
const와 포인터  (0) 2024.06.21
포인터와 배열  (0) 2024.06.20