Namespaces
Variants

Null-terminated multibyte strings

From cppreference.net

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

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

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

멀티바이트 문자 문자열은 null-terminated byte string (NTBS)와 레이아웃 호환됩니다. 즉, 문자 수 계산을 제외하고는 동일한 기능을 사용하여 저장, 복사, 검사할 수 있습니다. 올바른 로캘이 적용 중인 경우, I/O 함수들도 멀티바이트 문자열을 처리합니다. 멀티바이트 문자열은 다음과 같은 로캘 의존 변환 함수들을 사용하여 와이드 문자열과 상호 변환할 수 있습니다:

목차

함수

멀티바이트/와이드 문자 변환
헤더 파일에 정의됨 <stdlib.h>
다음 멀티바이트 문자에 포함된 바이트 수를 반환합니다
(함수)
다음 멀티바이트 문자를 와이드 문자로 변환합니다
(함수)
와이드 문자를 멀티바이트 표현으로 변환
(함수)
좁은 멀티바이트 문자 문자열을 와이드 문자열로 변환
(함수)
와이드 문자열을 좁은 멀티바이트 문자 문자열로 변환
(함수)
헤더 파일에 정의됨 <wchar.h>
(C95)
mbstate_t 객체가 초기 시프트 상태를 나타내는지 확인합니다
(함수)
(C95)
단일 바이트 좁은 문자를 가능한 경우 와이드 문자로 확장합니다
(함수)
(C95)
가능한 경우 와이드 문자를 단일 바이트 네로우 문자로 축소합니다
(함수)
(C95)
주어진 상태에서 다음 멀티바이트 문자에 포함된 바이트 수를 반환합니다
(함수)
(C95)
주어진 상태에서 다음 멀티바이트 문자를 와이드 문자로 변환합니다
(함수)
와이드 문자를 멀티바이트 표현으로 변환 (상태 정보 사용)
(함수)
상태 정보를 사용하여 좁은 멀티바이트 문자열을 와이드 문자열로 변환
(함수)
와이드 문자열을 상태 정보를 사용하여 좁은 멀티바이트 문자 문자열로 변환
(함수)
헤더 파일에 정의됨 <uchar.h>
(C23)
좁은 멀티바이트 문자를 UTF-8 인코딩으로 변환합니다
(함수)
(C23)
UTF-8 문자열을 좁은 멀티바이트 인코딩으로 변환
(함수)
좁은 멀티바이트 문자를 UTF-16 인코딩으로 변환합니다
(함수)
UTF-16 문자를 좁은 멀티바이트 인코딩으로 변환합니다
(함수)
좁은 멀티바이트 문자를 UTF-32 인코딩으로 변환합니다
(함수)
UTF-32 문자를 좁은 멀티바이트 인코딩으로 변환합니다
(함수)

타입

정의된 헤더 <uchar.h>
정의된 헤더 <wchar.h>
멀티바이트 문자 문자열을 순회하는 데 필요한 변환 상태 정보
(클래스)
정의된 헤더 <uchar.h>
(C23)
8비트 문자 타입
(typedef)
16비트 문자 타입
(typedef)
32비트 문자 타입
(typedef)

매크로

헤더 파일에 정의됨 <limits.h>
MB_LEN_MAX
지원되는 모든 로케일에서 멀티바이트 문자의 최대 바이트 수
(매크로 상수)
헤더 파일에 정의됨 <stdlib.h>
MB_CUR_MAX
현재 로케일에서 멀티바이트 문자의 최대 바이트 수
(매크로 변수)

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 7.10 정수형 크기 <limits.h> (p: TBD)
  • 7.22 일반 유틸리티 <stdlib.h> (p: TBD)
  • 7.28 유니코드 유틸리티 <uchar.h> (p: TBD)
  • 7.29 확장 멀티바이트 및 와이드 문자 유틸리티 <wchar.h> (p: TBD)
  • 7.31.12 일반 유틸리티 <stdlib.h> (p: TBD)
  • 7.31.16 확장 멀티바이트 및 와이드 문자 유틸리티 <wchar.h> (p: TBD)
  • K.3.6 일반 유틸리티 <stdlib.h> (p: TBD)
  • K.3.9 확장 멀티바이트 및 와이드 문자 유틸리티 <wchar.h> (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 7.10 정수 형식의 크기 <limits.h> (p: TBD)
  • 7.22 일반 유틸리티 <stdlib.h> (p: TBD)
  • 7.28 유니코드 유틸리티 <uchar.h> (p: TBD)
  • 7.29 확장 멀티바이트 및 와이드 문자 유틸리티 <wchar.h> (p: TBD)
  • 7.31.12 일반 유틸리티 <stdlib.h> (p: TBD)
  • 7.31.16 확장 멀티바이트 및 와이드 문자 유틸리티 <wchar.h> (p: TBD)
  • K.3.6 일반 유틸리티 <stdlib.h> (p: TBD)
  • K.3.9 확장 멀티바이트 및 와이드 문자 유틸리티 <wchar.h> (p: TBD)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.10 정수형 크기 <limits.h> (p: 222)
  • 7.22 일반 유틸리티 <stdlib.h> (p: 340-360)
  • 7.28 유니코드 유틸리티 <uchar.h> (p: 398-401)
  • 7.29 확장 멀티바이트 및 와이드 문자 유틸리티 <wchar.h> (p: 402-446)
  • 7.31.12 일반 유틸리티 <stdlib.h> (p: 456)
  • 7.31.16 확장 멀티바이트 및 와이드 문자 유틸리티 <wchar.h> (p: 456)
  • K.3.6 일반 유틸리티 <stdlib.h> (p: 604-614)
  • K.3.9 확장 멀티바이트 및 와이드 문자 유틸리티 <wchar.h> (p: 627-651)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.10 정수 타입의 크기 <limits.h> (p: 203)
  • 7.20 일반 유틸리티 <stdlib.h> (p: 306-324)
  • 7.24 확장 멀티바이트 및 와이드 문자 유틸리티 <wchar.h> (p: 348-392)
  • 7.26.10 일반 유틸리티 <stdlib.h> (p: 402)
  • 7.26.12 확장 멀티바이트 및 와이드 문자 유틸리티 <wchar.h> (p: 402)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 4.1.4 Limits <float.h> and <limits.h>
  • 4.10 GENERAL UTILITIES <stdlib.h>
  • 4.13.7 General utilities <stdlib.h>

참고 항목

C++ documentation for Null-terminated multibyte strings