名前空間
変種
操作

std::c8rtomb

提供: cppreference.com
< cpp‎ | string‎ | multibyte
ヘッダ <cuchar> で定義
std::size_t c8rtomb( char* s, char8_t c8, std::mbstate_t* ps );
(C++20以上)

単一の符号単位を UTF-8 からナローマルチバイト文字表現に変換します。

s がヌルポインタでなく、 c8 が何らかのコードポイントの有効な UTF-8 エンコーディングの最後の符号単位であれば、そのコードポイントのマルチバイト文字表現 (あらゆるシフトシーケンスを含み、現在のマルチバイト変換状態 *ps を考慮しつつ) を格納するために必要なバイト数を決定し、必要に応じて *ps を更新しながら、最初の要素を s が指す文字配列にそのマルチバイト表現を格納します。 最大 MB_CUR_MAX バイトがこの関数によって書き込まれる可能性があります。

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

s がヌルポインタの場合は、呼び出しは何らかの内部バッファ 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 に格納され、 (size_t)(-1) が返され、変換状態は未規定になります。

[編集] ノート

s にヌルポインタ引数を指定した c8rtomb の呼び出しは、 s にヌルポインタ引数を指定した c8rtomb の別の呼び出しと、データ競合を発生する可能性があります。

[編集]

[編集] 関連項目

(C++20)
ナローマルチバイト文字を UTF-8 エンコーディングに変換します
(関数) [edit]