Namespaces
Variants

Null-terminated multibyte strings

From cppreference.net

ヌル終端マルチバイト文字列(NTMBS)、または「マルチバイト文字列」は、ゼロ以外のバイト列の後に値がゼロのバイト(終端ヌル文字)が続くシーケンスです。

文字列に格納される各文字は1バイト以上を占有する場合があります。マルチバイト文字列で文字を表現するために使用されるエンコーディングはロケール固有です:UTF-8、GB18030、EUC-JP、Shift-JISなどがあります。例えば、char配列 { ' \xe4 ' , ' \xbd ' , ' \xa0 ' , ' \xe5 ' , ' \xa5 ' , ' \xbd ' , ' \0 ' } はUTF-8マルチバイトエンコーディングで文字列 "你好" を保持するNTMBSです:最初の3バイトが文字「你」をエンコードし、次の3バイトが文字「好」をエンコードします。同じ文字列をGB18030でエンコードすると、char配列 { ' \xc4 ' , ' \xe3 ' , ' \xba ' , ' \xc3 ' , ' \0 ' } となり、2つの文字それぞれが2バイトシーケンスとしてエンコードされます。

一部のマルチバイトエンコーディングでは、与えられたマルチバイト文字シーケンスが「シフトシーケンス」として知られる前のバイトシーケンスに応じて異なる文字を表す場合があります。このようなエンコーディングは状態依存と呼ばれます:各文字を解釈するには現在のシフト状態の知識が必要です。NTMBSは、初期シフト状態で開始および終了する場合にのみ有効です:シフトシーケンスが使用された場合、対応するアンシフトシーケンスが終端ナル文字の前に存在しなければなりません。このようなエンコーディングの例としてBOCU-1と SCSU があります。

マルチバイト文字列は null終端バイト文字列 (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 Unicodeユーティリティ <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 Unicodeユーティリティ <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 Unicodeユーティリティ <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 制限 <float.h> および <limits.h>
  • 4.10 一般ユーティリティ <stdlib.h>
  • 4.13.7 一般ユーティリティ <stdlib.h>

関連項目

C++ documentation for Null-terminated multibyte strings
日本語訳:
C++ documentation Null-terminated multibyte strings
変更点: - "for" → "の"(C++ドキュメントの対象を示す自然な日本語表現) - HTMLタグ、属性、C++固有用語("C++ documentation", "Null-terminated multibyte strings")は翻訳せず保持 - 元のフォーマットと構造を完全に維持