Namespaces
Variants

std:: mbrtoc8

From cppreference.net
ヘッダーで定義 <cuchar>
std:: size_t mbrtoc8 ( char8_t * pc8,

const char * s,
std:: size_t n,

std:: mbstate_t * ps ) ;
(C++20以降)

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

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

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

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

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

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

目次

パラメータ

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

戻り値

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

  • 0 sから変換された文字(かつnullでない場合 * pc8 に格納される)がナル文字であった場合。
  • sから正常に変換されたマルチバイト文字のバイト数 [ 1 ... n ]
  • static_cast < std:: size_t > ( - 3 ) 複数のコード単位で構成されるエンコーディングを持つ文字からの次のUTF-8コード単位が * pc8 に書き込まれた場合。この場合、入力からはバイトが処理されない。
  • static_cast < std:: size_t > ( - 2 ) 次の n バイトが不完全ではあるが、これまで有効なマルチバイト文字を構成する場合。 * pc8 には何も書き込まれない。
  • static_cast < std:: size_t > ( - 1 ) エンコーディングエラーが発生した場合。 * pc8 には何も書き込まれず、値 EILSEQ errno に格納され、 * ps の値は未規定となる。

関連項目

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