Namespaces
Variants

std:: c8rtomb

From cppreference.net
定義済みヘッダー <cuchar>
std:: size_t c8rtomb ( char * s, char8_t c8, std:: mbstate_t * ps ) ;
(C++20以降)

UTF-8の単一コードポイントをナローマルチバイト文字表現に変換します。

s が null ポインタではなく、かつ c8 がコードポイントの有効な UTF-8 エンコーディングの最後のコードユニットである場合、この関数はそのコードポイントのマルチバイト文字表現を格納するために必要なバイト数(シフトシーケンスを含み、現在のマルチバイト変換状態 * ps を考慮して)を決定し、マルチバイト文字表現を s が指す先頭要素の文字配列に格納し、必要に応じて * ps を更新します。この関数によって書き込まれるバイト数は最大で MB_CUR_MAX バイトです。

c8 がコードポイントの表現における最終UTF-8コード単位でない場合、この関数は s が指す配列には書き込まず、 * ps のみが更新されます。

s が null ポインタの場合、この呼び出しは内部バッファ buf に対して std :: c8rtomb ( buf, u8 ' \0 ' , ps ) を呼び出すことと等価です。

c8 がナル文字 u8 ' \0 ' である場合、初期シフト状態を復元するために必要なシフトシーケンスに先行してナルバイトが格納され、変換状態パラメータ * ps は初期シフト状態を表すように更新されます。

この関数で使用されるマルチバイトエンコーディングは、現在アクティブなCロケールによって指定されます。

目次

パラメータ

s - マルチバイト文字が格納されるナロウ文字配列へのポインタ
c8 - 変換対象のUTF-8コードユニット
ps - マルチバイト文字列を解釈する際に使用される変換状態オブジェクトへのポインタ

戻り値

配列オブジェクトに格納されているバイト数(シフトシーケンスを含む)。これは c8 がコードポイントのUTF-8表現における最終コードユニットでない場合、ゼロとなる可能性があります。

c8 が無効である場合(有効なマルチバイト文字に対応する char8_t のシーケンスを構成しない場合)、マクロ EILSEQ の値が errno に格納され、 static_cast < std:: size_t > ( - 1 ) が返され、変換状態は未規定となる。

注記

c8rtomb の呼び出しにおいて、 s に対する null ポインタ引数を使用する場合、他の c8rtomb の呼び出しで s に対する null ポインタ引数を使用するものとの間でデータ競合が発生する可能性があります。

関連項目

(C++20)
ナローマルチバイト文字をUTF-8エンコーディングに変換する
(関数)
(C++11)
UTF-16文字をナローマルチバイトエンコーディングに変換する
(関数)
C documentation for c8rtomb