[ char ]
C언어는 미국에서 만들어져 문자 표현은 미국 표준 문자인 ASCII 코드를 표현한다.
- ASCII : American Standard Code for Information Interchange
C언어에서 문자를 표현할 때 char 형식을 사용하며 char 형식은 ASCII 코드를 표현할 수 있는 크기로 설계되었다.
영문 알파벳과 대/소문자, 숫자 문자 및 기타 문자를 포함해도 1byte면 표현이 가능하기 때문에 char는 크기가 1byte로 정해졌다.
하지만 한글 또는 여러 나라의 문자들은 256개를 초과하므로 char형으로 한글 문자를 표현하지 못한다.
때문에 전 세계 모든 문자들을 컴퓨터로 표현할 수 있도록 설계된 표준이 유니코드(Unicode)이다.
영문이 아닌 한글처럼 ASCII 코드가 아닌 문자를 표현하는 데 한계가 있기 때문에 wchar_t 형을 사용해야 한다.
[ wchar_t ]
unsigned short 타입을 wchar_t라고 정의해 놓은 것으로 유니코드, 국제어 등에 쓰이며, 1byte인 char형 보다 데이터 크기가 크다.
wchar_t 형 문자나 문자열을 표현할 때에는 대문자 L과 함께 문자 표현을 사용한다. (ex, L'홍', L"홍길동")
그리고 자신이 사용하는 문자가 무엇인지 Locale을 지정해 주어야 한다.
std::locale::global(std::locale("kor"));
std::locale::global(std::locale(""));
kor을 적어주면 Loacle 설정이 Korean으로 되며, 공백으로 두면 현재 시스템의 Locale로 자동 설정된다.
[ basic_string ]
string과 wstring은 basic_string 클래스의 wchar_t 타입으로 들어간 형태이다.
std::string은 basic_string 클래스 템플릿의 인스턴스화 버전이다.
basic_string 클래스를 보면 CharT 타입의 객체들을 메모리에 연속적으로 저장하고, 여러 가지 문자열 연산들을 지원해 주는 클래스이다.
만약 CharT자리에 char가 온다면 std::string이 될 것이고 wchar_t가 온다면 std::wstring이 된다.
[ wstring 출력 ]
wcout
std::wstring wsMessage;
wcout << wsMessage << endl;
wprintf
std::wstring wsMessage;
wprintf(wsMessage.c_str());
↓↓ c_str()은 여기!! ↓↓
2023.03.02 - [프로그래밍/C or C++] - [C/C++] string 문자열 출력 (printf & cout)
[ string과 wstring 변환 ]
sitring과 wstring의 변환은 string 라이브러리의 assign 함수를 사용하면 된다.
string -> wstring 변환
std::string sMmessage = "message";
std::wstring swMessage;
swMessage.assign(sMessage.begin(), sMessage.end());
wprintf(swMessage.c_str());
wstring -> string 변환
std::wstring wsMmssage = L"message";
std::string sMessage;
sMessage.assign(wsMmssage.begin(), wsMmssage.end());
printf(sMessage.c_str());