Namespaces
Variants

Null-terminated multibyte strings

From cppreference.net

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

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