ヌル終端マルチバイト文字列
ヌル終端マルチバイト文字列(NTMBS)、または「マルチバイト文字列」とは、0ではないバイトのシーケンスの後に、値が0のバイト(終端ヌル文字)が続くものです。
文字列に格納される各文字は、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'
一部のマルチバイトエンコーディングでは、先行するバイトシーケンス(「シフトシーケンス」として知られる)に応じて、特定のマルチバイト文字シーケンスが異なる文字を表すことがあります。このようなエンコーディングは、ステート依存(state-dependent)として知られています。各文字を解釈するには、現在のシフト状態の知識が必要です。NTMBSは、初期シフト状態で始まり、初期シフト状態で終わる場合にのみ有効です。シフトシーケンスが使用された場合、対応するアンシフトシーケンスが終端ヌル文字の前に存在しなければなりません。そのようなエンコーディングの例として、BOCU-1やSCSUがあります。
マルチバイト文字列はヌル終端バイト文字列(NTBS)とレイアウト互換性があり、つまり、文字数の計算を除いて、同じ機能を使用して格納、コピー、検査ができます。正しいロケールが有効であれば、I/O関数もマルチバイト文字列を扱います。マルチバイト文字列は、以下のロケール依存の変換関数を使用してワイド文字列との間で相互に変換できます。
目次 |
[編集] 関数
マルチバイト文字/ワイド文字変換 | |
| ヘッダー
<stdlib.h> で定義 | |
| 次のマルチバイト文字のバイト数を返す (関数) | |
| 次のマルチバイト文字をワイド文字に変換する (関数) | |
| (C11) |
ワイド文字をそのマルチバイト表現に変換する (関数) |
| (C11) |
ナローマルチバイト文字列をワイド文字列に変換する (関数) |
| (C11) |
ワイド文字列をナローマルチバイト文字列に変換する (関数) |
| ヘッダー
<wchar.h> で定義 | |
| (C95) |
mbstate_t オブジェクトが初期シフト状態を表すかチェックする (関数) |
| (C95) |
可能であれば、1バイトのナロー文字をワイド文字にワイド化する (関数) |
| (C95) |
可能であれば、ワイド文字を1バイトのナロー文字にナロー化する (関数) |
| (C95) |
与えられた状態で、次のマルチバイト文字のバイト数を返す (関数) |
| (C95) |
与えられた状態で、次のマルチバイト文字をワイド文字に変換する (関数) |
| (C95)(C11) |
与えられた状態で、ワイド文字をそのマルチバイト表現に変換する (関数) |
| (C95)(C11) |
与えられた状態で、ナローマルチバイト文字列をワイド文字列に変換する (関数) |
| (C95)(C11) |
与えられた状態で、ワイド文字列をナローマルチバイト文字列に変換する (関数) |
| ヘッダー
<uchar.h> で定義 | |
| (C23) |
ナローマルチバイト文字をUTF-8エンコーディングに変換する (関数) |
| (C23) |
UTF-8文字列をナローマルチバイトエンコーディングに変換する (関数) |
| (C11) |
ナローマルチバイト文字をUTF-16エンコーディングに変換する (関数) |
| (C11) |
UTF-16文字をナローマルチバイトエンコーディングに変換する (関数) |
| (C11) |
ナローマルチバイト文字をUTF-32エンコーディングに変換する (関数) |
| (C11) |
UTF-32文字をナローマルチバイトエンコーディングに変換する (関数) |
[編集] 型
| ヘッダー
<uchar.h> で定義 | |
| ヘッダー
<wchar.h> で定義 | |
| (C95) |
マルチバイト文字列を走査するために必要な変換状態情報 (クラス) |
| ヘッダー
<uchar.h> で定義 | |
| (C23) |
8ビット文字型 (typedef) |
| (C11) |
16ビット文字型 (typedef) |
| (C11) |
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> and <limits.h>
- 4.10 一般ユーティリティ <stdlib.h>
- 4.13.7 一般ユーティリティ <stdlib.h>
[編集] 関連項目
| ヌル終端マルチバイト文字列の C++ ドキュメント
|