名前空間
変種
操作

ヌル終端マルチバイト文字列

From cppreference.com
< cpp‎ | string
 
 
 
 

ヌル終端マルチバイト文字列 (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は、初期シフト状態で始まり、初期シフト状態で終わる場合にのみ有効です。シフトシーケンスが使用された場合、対応するアンシフトシーケンスが終端ヌル文字の前に存在する必要があります。このようなエンコーディングの例には、7ビットJIS、BOCU-1、SCSUがあります。

マルチバイト文字列は、ヌル終端バイト文字列 (NTBS) とレイアウト互換性があります。つまり、文字数の計算を除き、同じ機能を使用して格納、コピー、検査ができます。正しいロケールが有効な場合、I/O関数もマルチバイト文字列を処理します。マルチバイト文字列は、std::codecvt のメンバー関数、std::wstring_convert、または以下のロケール依存の変換関数を使用して、ワイド文字列との間で変換できます。

目次

[編集] 関数

マルチバイト/ワイド文字変換
ヘッダ <cstdlib> で定義
次のマルチバイト文字のバイト数を返す
(関数) [編集]
次のマルチバイト文字をワイド文字に変換する
(関数) [編集]
ワイド文字をそのマルチバイト表現に変換する
(関数) [編集]
ナローマルチバイト文字列をワイド文字列に変換する
(関数) [編集]
ワイド文字列をナローマルチバイト文字列に変換する
(関数) [編集]
ヘッダ <cwchar> で定義
与えられた状態で、次のマルチバイト文字のバイト数を返す
(関数) [編集]
std::mbstate_t オブジェクトが初期シフト状態を表しているか確認する
(関数) [編集]
可能であれば、1バイトのナロー文字をワイド文字にワイド化する
(関数) [編集]
可能であれば、ワイド文字を1バイトのナロー文字にナロー化する
(関数) [編集]
与えられた状態で、次のマルチバイト文字をワイド文字に変換する
(関数) [編集]
与えられた状態で、ワイド文字をそのマルチバイト表現に変換する
(関数) [編集]
与えられた状態で、ナローマルチバイト文字列をワイド文字列に変換する
(関数) [編集]
与えられた状態で、ワイド文字列をナローマルチバイト文字列に変換する
(関数) [編集]
ヘッダー <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言語ドキュメント
English 日本語 中文(简体) 中文(繁體)