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