名前空間
変種
操作

mbrtoc8

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

ナローマルチバイト文字をUTF-8エンコーディングに変換します。

もし s がヌルポインタでない場合、マルチバイト文字文字列を最大 n バイト検査し、s が指すバイトから開始して、次のマルチバイト文字を完成させるために必要なバイト数(シフトシーケンスを含む)を決定します。関数が s 内の次のマルチバイト文字が完全で有効であると判断した場合、それをUTF-8に変換し、最初のUTF-8コードユニットを *pc8pc8 がヌルでない場合)に格納します。

*s のマルチバイト文字のUTF-8エンコーディングが複数のUTF-8コードユニットから構成される場合、この関数を最初に呼び出した後、*ps は更新され、次の `mbrtoc8` の呼び出しで、*s を考慮せずに、追加のUTF-8コードユニットが出力されます。

もし s がヌルポインタの場合、npc8 の値は無視され、呼び出しは mbrtoc8(nullptr, "", 1, ps) と同等になります。

生成されたUTF-8コードユニットが u8'\0' の場合、変換状態 *ps は初期シフト状態を表します。

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

目次

[編集] パラメータ

pc8 - 結果のUTF-8コードユニットが書き込まれる場所へのポインタ
s - 入力として使用されるマルチバイト文字列へのポインタ
n - 検査できるs内のバイト数の制限
ps - マルチバイト文字列を解釈する際に使用される変換状態オブジェクトへのポインタ

[編集] 戻り値

以下が適用される場合、最初のもの

  • 0 : s から変換された(そして非ヌルの場合は *pc8 に格納された)文字がヌル文字であった場合。
  • マルチバイト文字から正常に変換されたバイト数 [1n]
  • (size_t)-3 : 複数のコードユニットからなる文字から、次のUTF-8コードユニットが *pc8 に書き込まれた場合。この場合、入力からのバイトは処理されません。
  • (size_t)-2 : 次の n バイトが、不完全だが今のところ有効なマルチバイト文字を構成する場合。*pc8 には何も書き込まれません。
  • (size_t)-1 : エンコーディングエラーが発生した場合。*pc8 には何も書き込まれず、EILSEQ の値が errno に格納され、*ps の値は未定義となります。

[編集]

[編集] 参照

  • C23標準 (ISO/IEC 9899:2024)
  • 7.30.1.1 The mbrtoc8 function

[編集] 関連項目

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