std::c8rtomb
| ヘッダー <cuchar> で定義 |
||
| std::size_t c8rtomb( char* s, char8_t c8, std::mbstate_t* ps ); |
(C++20以降) | |
UTF-8からナローなマルチバイト文字表現に単一のコードポイントを変換します。
sがヌルポインタではなく、c8がコードポイントの有効なUTF-8エンコーディングの最後のコードユニットである場合、この関数は、そのコードポイントのマルチバイト文字表現を格納するために必要なバイト数(シフトシーケンスを含み、現在のマルチバイト変換状態*psを考慮に入れる)を決定し、マルチバイト文字表現をsが指す最初の要素を持つ文字配列に格納し、必要に応じて*psを更新します。この関数によって書き込まれるバイト数は最大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に格納され、static_cast<std::size_t>(-1)が返され、変換状態は不定になります。
[編集] 備考
sにヌルポインタ引数を与えてc8rtombを呼び出すと、sにヌルポインタ引数を与えて他のc8rtombを呼び出した場合とデータ競合が発生する可能性があります。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 関連項目
| (C++20) |
ナローマルチバイト文字をUTF-8エンコーディングに変換する (関数) |
| (C++11) |
UTF-16文字をナローマルチバイトエンコーディングに変換する (関数) |
| c8rtombのCドキュメント
| |