Namespaces
Variants

mbrtoc8

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

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

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

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

s がヌルポインタの場合、 n および pc8 の値は無視され、この呼び出しは mbrtoc8 ( nullptr, "" , 1 , ps ) と等価です。

UTF-8コード単位が u8 ' \0 ' を生成する場合、変換状態 * ps は初期シフト状態を表します。

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

目次

パラメータ

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

戻り値

以下のうち最初に該当するもの:

  • 0 sから変換された文字(かつnullでない場合 * pc8 に格納された)がナル文字であった場合。
  • sから正常に変換されたマルチバイト文字のバイト数 [ 1 , n ]
  • ( 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 mbrtoc8関数

関連項目

(C23)
UTF-8文字列をナローマルチバイトエンコーディングに変換する
(関数)