※ C / C++을 이미 알고 있으나 개인적인 공부 및 복습을 위해 포스팅 하는 글이므로
C++에 대한 구체적인 정보를 담고 있지 않습니다.
▶ 문자
ㆍ char : 알파벳 / 숫자 문자를 나타낸다
ㆍ wchar_t : 유니코드 문자를 나타낸다
#include <iostream>
using namespace std;
// bool은 그냥 정수지만, 참 거짓을 나타내기 위해 사용한다
// 사실char도 마찬가지, 그냥 정수지만 문자의 의미를 나타내기 위해 사용
// char : 알파벳 / 숫자 문자를 나타낸다
// wchar_t : 유니코드 문자를 나타낸다
//ASCII 코드 (American Standard Code for Information Interchange)
char ch = 97;
//일반적으론 char ch = 'a'; 이런식으로 사용된다
int main()
{
cout << ch << endl;
//어라? 97을 입력했는데 a가 출력된다! ASCII 코드
}
※ 알게된 사실
ㆍ char 그냥 정수지만 문자의 의미를 나타내기 위해 사용. 즉, 연산도 가능하다는 소리다 (ASCII)
char ch3 = 'a' + 1;
int main()
{
cout << ch3 << endl; //b출력
}
▶ 유니코드란?
ㆍ국제화 시대에서는 영어만으로 서비스를 할 수 없다.....
ㆍ 전 세계의 문자와 기호를 통합하여 표현하기 위해 설계된 인코딩 표준.
ㆍ 다양한 언어의 문자를 컴퓨터에서 일관되게 표현하고 처리할 수 있도록 지원한다.
▶ 유니코드의 인코딩 방식인 UTF8 UTF16에 대해
1. UTF8
ㆍ 알파벳, 숫자는 1바이트로 표기된다 (아스키문자의 0~127번은 1바이트로 표기)
ㆍ 유럽지역의 문자는 2바이트, 한글 한자 등은 3바이트.. 또한 어떤건 4바이트로 표기된다
ㆍ UTF8은 ASCII와 호환 된다.
ㆍ 웹페이지, 이메일, 데이터베이스 등에서 많이 사용된다.
2. UTF16
ㆍ 대부분이 2바이트로 표기된다. (기본 다국어 평면(BMP)에 속하는 문자는 2바이트)
ㆍ 극히 예외적인 고대 문자만 4바이트로 표기된다(BMP를 넘어서는 문자)
특징 | UTF8 | UTF16 |
인코딩 방식 | 1~4 | 2 (극히드물게4) |
메모리 효율성 | 아스키 문자가 많으면 효율적, 비아스키 문자는 더 많은 바이트 사용 | 대부분의 언어에서 그냥 문자당 2바이트 사용 |
호환성 | 아스키와 완벽히 호환 | 아스키 호환 안댐 |
사용 용도 | 웹, 이메일 등등 | 특정 플랫폼이나 언어(java,C#) |
▶ C++에서 UTF16을 저장하는게 바로 wchar_t 이다
ㆍ whar_t는 L'문자' 이런식으로 앞에 L을 붙혀줘서 표기해줘야한다.
wchar_t wch = L'안';
int main()
{
//cout << wch << endl; //50504 출력
wcout.imbue(locale("kor"));
wcout << wch << endl; //정상적으로 '안' 출력
}
ㆍ 그냥 cout을 하면 cout이 char 전용이기 때문에 50504라는 이상한 값이 출력된다
ㆍ 그럼 wchar_t를 출력하고싶다면?? -> wcout을 해야한다 근데...
ㆍ 기본적으로 한국어를 인식하지못해서 wcout.imbue(locale("kor"));을 입력해줘야 한다
ㆍ 추가로 마우스를 올려서 나오는0xc548 을 입력해도 '안'이라는 문자가 출력된다
▶ Escape Sequence
ㆍ 표기하기 애매한 애들을 표현한다
1. \t = 아스키코드9 = Tab
2. \n = 아스키코드10 = LineFeed (한줄아래로)
3. \r = 아스키코드13 = CarriageReturn (커서 <<)
ㆍ 그 이외에도 된다. 예를들어 아래 예시코드다
wchar_t test2 = '\'';
int main()
{
wcout << test2 << endl; // '이 출력된다
}
※ 특수문자 표기는 \ 를 적극적으로 이용하자
※ 결론: 문자는 그냥 숫자에 불과하고, 그 숫자를 문자로 인코딩해주는 약속이 있을 뿐이다.
'C++프로그래밍 > C 와 C++ 기초실습' 카테고리의 다른 글
비교연산과 논리연산 (디스어셈블리 디버그) (0) | 2024.09.15 |
---|---|
산술 연산(디스어셈블리 디버그 테스트) (1) | 2024.09.15 |
bool과 부동소수점 (1) | 2024.09.15 |
정수 (0) | 2024.09.15 |
컴파일 과정과 전처리기 (0) | 2023.10.09 |