トップページ – C言語編 – 標準ライブラリのリファレンス(名前順)
トップページ – C言語編 – 標準ライブラリのリファレンス(ヘッダ別)
概要 |
マルチバイト文字を char32_t型の文字に変換する。 |
|
ヘッダ | ||
形式 |
size_t mbrtoc32(char32_t* pc32, const char* s, size_t n, mbstate_t* ps); |
|
引数 |
pc16 |
変換結果を受け取るメモリアドレス。受け取らない場合はヌルポインタでも良い。 |
s |
変換対象のマルチバイト文字列。 |
|
n |
変換する最大バイト数。 |
|
ps |
変換状態を管理するオブジェクトへのポインタ。またはヌルポインタ。 |
|
戻り値 |
引数s が指すバイトから、引数n で指定したバイト数だけを調べ、それがマルチバイト文字として有効なバイト列であれば、マルチバイト文字を構成するバイト数を返す。それがヌル文字ならば 0 を返す。 マルチバイト文字として有効なバイト列でなければ、-1 を size_t型にキャスト📘した値が返される。 有効なバイト列ではあるが、1つのマルチバイト文字として完結しなかった場合には、-2 を size_t型にキャストした値が返される。 マルチバイト文字のバイトを消費せずに、有効な char16_t の文字を構成する値を得られた場合は、-3 を size_t型にキャストした値が返される。 |
|
詳細 |
引数ps は、マルチバイト文字の並びの現時点までの変換状態を管理しているオブジェクト📘を指す。引数ps をヌルポインタとした場合は、この関数が内部で持っている mbstate_t オブジェクトを使う。これは、プログラム開始時点で適切に初期化されている。 引数s がヌルポインタの場合、 バイト列がマルチバイト文字を構成しているものと考え、引数 n で指定したバイト数分だけ調べる。調べた範囲が、有効なマルチバイト文字を構成していれば、それに対応する char32_t の文字の 32ビット値を決定し、その値を引数pc32 で指定した位置へ格納する。引数pc32 がヌルポインタの場合は格納せず処理を終える。 char32_t の文字のエンコーディング形式が UTF-32 であるとすると、1文字を1つの char32_t型の値だけでは表現できないケースがありえる(結合文字)。この場合、この関数の1回の呼び出しで、前半の 32ビット値だけを得られ、次回、同じ mbstate_tオブジェクトを与えることで、続きの 32ビット値を得られる。続きの 32ビット値を得るときには、マルチバイト文字の新たなバイトを消費することがなく、(size_t)-3 という特別な戻り値を返す。 マルチバイト文字を構成するバイト列が無効であるとき、表現形式エラーが発生し、errno に EILSEQ が格納される。 この関数は、ロケールの LC_CTYPE カテゴリの影響を受ける。 |
|
注意 |
あくまで文字の変換なので、末尾に終端文字(U’\0’) は付加されない。 Visual Studio 2017 で確認すると、ネイティブロケールではマルチバイト文字のエンコーディングエラーは Shift_JIS (CP932) であるが、UTF-8 の文字列を渡さなければならないようである。Shift_JIS の文字列を渡すと、エンコーディングエラーになることがある。 |
|
使用例 |
実行結果:
|
|
関連 | char32_t の文字からマルチバイト文字への変換は、c32rtomb関数で行える。 | |
解説章 |
本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place 管理者に紹介料が支払われています。
()
の前後の空白の空け方)(
の直後、)
の直前に空白を入れない)return 0;
を削除(C言語編全体でのコードの統一)
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
![]() |
管理者情報 | プライバシーポリシー |