名前空間
変種
操作

c8rtomb

From cppreference.com
< c‎ | string‎ | multibyte
ヘッダー <uchar.h> で定義
size_t c8rtomb( char* restrict s, char8_t c8, mbstate_t* restrict ps );
(C23以降)

1つのコードポイントをUTF-8から、窄幅マルチバイト文字表現に変換します。

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

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

もしsがヌルポインタである場合、呼び出しは、ある内部バッファbufに対する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を呼び出す他の呼び出しとのデータ競合が発生する可能性があります。

[編集]

[編集] 参考文献

  • C23標準 (ISO/IEC 9899:2024)
  • 7.30.1.2 c8rtomb関数

[編集] 関連項目

ナローマルチバイト文字をUTF-8エンコーディングに変換する
(関数) [編集]
C++ドキュメントc8rtomb
English 日本語 中文(简体) 中文(繁體)