Namespaces
Variants

Null-terminated multibyte strings

From cppreference.net

널 종료 멀티바이트 문자열(NTMBS) 또는 "멀티바이트 문자열"은 널이 아닌 바이트들의 시퀀스 뒤에 값이 0인 바이트(종료 널 문자)가 오는 문자열입니다.

문자열에 저장된 각 문자는 하나 이상의 바이트를 차지할 수 있습니다. 멀티바이트 문자 문자열에서 문자를 표현하는 데 사용되는 인코딩은 로케일별로 다릅니다: UTF-8, GB18030, EUC-JP, Shift-JIS 등이 될 수 있습니다. 예를 들어, 다음 char 배열 { ' \xe4 ' , ' \xbd ' , ' \xa0 ' , ' \xe5 ' , ' \xa5 ' , ' \xbd ' , ' \0 ' } 는 UTF-8 멀티바이트 인코딩으로 문자열 "你好" 를 담고 있는 NTMBS입니다: 처음 세 바이트는 문자 你를 인코딩하고, 다음 세 바이트는 문자 好를 인코딩합니다. 동일한 문자열을 GB18030으로 인코딩하면 char 배열 { ' \xc4 ' , ' \xe3 ' , ' \xba ' , ' \xc3 ' , ' \0 ' } 가 되며, 여기서 두 문자 각각이 2바이트 시퀀스로 인코딩됩니다.

일부 멀티바이트 인코딩에서는 주어진 멀티바이트 문자 시퀀스가 "시프트 시퀀스"라고 알려진 이전 바이트 시퀀스에 따라 다른 문자를 나타낼 수 있습니다. 이러한 인코딩은 상태 의존적이라고 알려져 있습니다: 각 문자를 해석하려면 현재 시프트 상태에 대한 지식이 필요합니다. NTMBS는 초기 시프트 상태에서 시작하고 종료될 때만 유효합니다: 시프트 시퀀스가 사용된 경우, 종료 널 문자 앞에 해당 언시프트 시퀀스가 존재해야 합니다. 이러한 인코딩의 예로는 7비트 JIS, BOCU-1 및 SCSU 가 있습니다.

멀티바이트 문자 문자열은 널 종료 바이트 문자열(NTBS)과 레이아웃 호환됩니다. 즉, 문자 수를 계산하는 것을 제외하고는 동일한 기능을 사용하여 저장, 복사 및 검사할 수 있습니다. 올바른 로케일이 적용되면 I/O 함수도 멀티바이트 문자열을 처리합니다. 멀티바이트 문자열은 std::codecvt 멤버 함수, std::wstring_convert 또는 다음 로케일 의존 변환 함수들을 사용하여 와이드 문자열과 상호 변환할 수 있습니다:

목차

함수

멀티바이트/와이드 문자 변환
정의된 헤더 <cstdlib>
다음 멀티바이트 문자의 바이트 수를 반환
(함수)
다음 멀티바이트 문자를 와이드 문자로 변환
(함수)
와이드 문자를 멀티바이트 표현으로 변환
(함수)
좁은 멀티바이트 문자열을 와이드 문자열로 변환
(함수)
와이드 문자열을 좁은 멀티바이트 문자열로 변환
(함수)
정의된 헤더 <cwchar>
상태를 고려하여 다음 멀티바이트 문자의 바이트 수를 반환
(함수)
std::mbstate_t 객체가 초기 시프트 상태를 나타내는지 확인
(함수)
단일 바이트 좁은 문자를 와이드 문자로 확장 (가능한 경우)
(함수)
와이드 문자를 단일 바이트 좁은 문자로 축소 (가능한 경우)
(함수)
상태를 고려하여 다음 멀티바이트 문자를 와이드 문자로 변환
(함수)
상태를 고려하여 와이드 문자를 멀티바이트 표현으로 변환
(함수)
상태를 고려하여 좁은 멀티바이트 문자열을 와이드 문자열로 변환
(함수)
상태를 고려하여 와이드 문자열을 좁은 멀티바이트 문자열로 변환
(함수)
정의된 헤더 <cuchar>
(C++20)
좁은 멀티바이트 문자를 UTF-8 인코딩으로 변환
(함수)
(C++20)
UTF-8 문자열을 좁은 멀티바이트 인코딩으로 변환
(함수)
(C++11)
좁은 멀티바이트 문자를 UTF-16 인코딩으로 변환
(함수)
(C++11)
UTF-16 문자를 좁은 멀티바이트 인코딩으로 변환
(함수)
(C++11)
좁은 멀티바이트 문자를 UTF-32 인코딩으로 변환
(함수)
(C++11)
UTF-32 문자를 좁은 멀티바이트 인코딩으로 변환
(함수)

타입

헤더 파일에 정의됨 <cwchar>
멀티바이트 문자 문자열을 순회하는 데 필요한 변환 상태 정보
(클래스)

매크로

헤더에 정의됨 <climits>
MB_LEN_MAX
멀티바이트 문자당 최대 바이트 수
(매크로 상수)
헤더에 정의됨 <cstdlib>
MB_CUR_MAX
현재 C 로캘에서 멀티바이트 문자당 최대 바이트 수
(매크로 변수)
헤더에 정의됨 <cuchar>
__STDC_UTF_16__
(C++11)
mbrtoc16 및 c16rtomb에서 UTF-16 인코딩이 사용됨을 나타냄
(매크로 상수)
__STDC_UTF_32__
(C++11)
mbrtoc32 및 c32rtomb에서 UTF-32 인코딩이 사용됨을 나타냄
(매크로 상수)

참고 항목

C documentation for Null-terminated multibyte strings