ヌル終端マルチバイト文字列
ヌル終端マルチバイト文字列 (null-terminated multibyte string; NTMBS) または「マルチバイト文字列」は、非ゼロのバイト列に値ゼロのバイト (終端のヌル文字) が続いたものです。
文字列に格納されている各文字は2つ以上のバイトを使う場合があります。 マルチバイト文字列の文字を表すために使われるエンコーディングはロケール固有です。 UTF-8 であったり、 GB18030, EUC-JP, Shift-JIS などであったりします。 例えば、文字の配列 {'\xe4','\xbd','\xa0','\xe5','\xa5','\xbd','\0'} は UTF-8 エンコーディングでは "你好" を保持するNTMBSです (最初の3つのバイトが文字「你」を符号化し、次の3つのバイトが文字「好」を符号化します)。 同じ文字列が GB18030 では {'\xc4', '\xe3', '\xba', '\xc3', '\0'} になります (各文字が2バイトで符号化されます)。
一部のマルチバイトエンコーディングでは、あるマルチバイト文字シーケンスが、以前に現れた「シフトシーケンス」と呼ばれるバイトシーケンスに依存して、異なる文字を表現する場合があります。 このようなエンコーディングは状態依存と呼ばれ、各文字を解釈するためには現在のシフト状態を知る必要があります。 NTMBSは初期シフト状態で始まり初期シフト状態で終わる場合に限り有効です。 シフトシーケンスが現れた場合は、終端のヌル文字の前に、対応する脱シフトシーケンスが現れる必要があります。 このようなエンコーディングの例としては BOCU-1 や SCSU があります。
マルチバイト文字列はヌル終端バイト文字列 (NTBS) とレイアウト互換です。 つまり、同じ方法を使用して格納したり、コピーしたり、検査することができます。 ただし、文字数の計算は除きます。 現在のロケールが有効であれば、入出力関数はマルチバイト文字列も取り扱えます。 以下のロケール依存変換関数を使ってマルチバイト文字列をワイド文字列に変換したり、ワイド文字列をマルチバイト文字列に変換したりできます。
目次 |
[編集] マルチバイト文字列とワイド文字列の変換
ヘッダ
<stdlib.h> で定義 | |
次のマルチバイト文字のバイト数を返します (関数) | |
次のマルチバイト文字をワイド文字に変換します (関数) | |
(C11) |
ワイド文字をマルチバイト表現に変換します (関数) |
(C11) |
マルチバイト文字列をワイド文字列に変換します (関数) |
(C11) |
ワイド文字列をマルチバイト文字列に変換します (関数) |
ヘッダ
<wchar.h> で定義 | |
(C95) |
mbstate_t オブジェクトが初期シフト状態を表しているかどうかチェックします (関数) |
(C95) |
可能であればシングルバイト文字をワイド文字に変換します (関数) |
(C95) |
可能であればワイド文字をシングルバイト文字に変換します (関数) |
(C95) |
指定された状態を使用して次のマルチバイト文字のバイト数を返します (関数) |
(C95) |
指定された状態を使用して次のマルチバイト文字をワイド文字に変換します (関数) |
(C95)(C11) |
指定された状態を使用してワイド文字をマルチバイト表現に変換します (関数) |
(C95)(C11) |
指定された状態を使用してマルチバイト文字列をワイド文字列に変換します (関数) |
(C95)(C11) |
指定された状態を使用してワイド文字列をマルチバイト文字列に変換します (関数) |
ヘッダ
<uchar.h> で定義 | |
(C11) |
マルチバイト文字列から次の16ビットワイド文字を生成します (関数) |
(C11) |
16ビットワイド文字をマルチバイト文字列に変換します (関数) |
(C11) |
マルチバイト文字列から次の32ビットワイド文字を生成します (関数) |
(C11) |
32ビットワイド文字をマルチバイト文字列に変換します (関数) |
[編集] 型
ヘッダ
<wchar.h> で定義 | |
(C95) |
マルチバイト文字列を反復処理するために必要な変換状態情報 (構造体) |
ヘッダ
<uchar.h> で定義 | |
(C11) |
16ビットワイド文字型 (typedef) |
(C11) |
32ビットワイド文字型 (typedef) |
[編集] マクロ
ヘッダ
<limits.h> で定義 | |
MB_LEN_MAX |
サポートされているあらゆるローケルにおける、マルチバイト文字1文字の最大バイト数 (マクロ定数) |
ヘッダ
<stdlib.h> で定義 | |
MB_CUR_MAX |
現在のロケールにおける、マルチバイト文字1文字の最大バイト数 (マクロ変数) |
ヘッダ
<uchar.h> で定義 | |
__STDC_UTF_16__ (C11) |
mbrtoc16 と c16rtomb で UTF-16 エンコーディングが使用されることを表します (マクロ定数) |
__STDC_UTF_32__ (C11) |
mbrtoc32 と c32rtomb で UTF-32 エンコーディングが使用されることを表します (マクロ定数) |
[編集] 参考文献
- C11 standard (ISO/IEC 9899:2011):
- 7.10 Sizes of integer types <limits.h> (p: 222)
- 7.22 General utilities <stdlib.h> (p: 340-360)
- 7.28 Unicode utilities <uchar.h> (p: 398-401)
- 7.29 Extended multibyte and wide character utilities <wchar.h> (p: 402-446)
- 7.31.12 General utilities <stdlib.h> (p: 456)
- 7.31.16 Extended multibyte and wide character utilities <wchar.h> (p: 456)
- K.3.6 General utilities <stdlib.h> (p: 604-614)
- K.3.9 Extended multibyte and wide character utilities <wchar.h> (p: 627-651)
- C99 standard (ISO/IEC 9899:1999):
- 7.10 Sizes of integer types <limits.h> (p: 203)
- 7.20 General utilities <stdlib.h> (p: 306-324)
- 7.24 Extended multibyte and wide character utilities <wchar.h> (p: 348-392)
- 7.26.10 General utilities <stdlib.h> (p: 402)
- 7.26.12 Extended multibyte and wide character utilities <wchar.h> (p: 402)
- C89/C90 standard (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++リファレンス
|