概要
UTF-32文字 (char32_t) を、マルチバイト文字へ変換する。
c32をマルチバイト文字へ変換し、sが指す配列へ書き込む。書き込まれるバイト数は最大でMB_CUR_MAXである。変換状態はpsが指すオブジェクトに保持されるため、複数のスレッドから安全に使用できる。
sがヌルポインタの場合、c32rtomb(buf, uU'\0', ps)の呼び出しと等価であり(bufは内部のバッファ)、変換状態を初期状態に戻す動作となる。
戻り値
- 書き込んだバイト数を返す
- 上位サロゲートのみを渡すなど、文字が確定しない場合は
0を返す c32が有効な文字ではない場合、(size_t)-1を返し、errnoにEILSEQを設定する
備考
psがヌルポインタの場合、処理系が用意した内部のオブジェクトが変換状態として使用される- 書き込み先の配列は、
MB_CUR_MAXバイト以上の大きさをもたなければならない - マルチバイト文字への変換は、現在のロケールカテゴリ
LC_CTYPEに依存する
例
#include <cuchar>
#include <clocale>
#include <cstdlib>
#include <cstdio>
int main()
{
std::setlocale(LC_ALL, "C.UTF-8");
char buffer[MB_CUR_MAX];
std::mbstate_t state{};
// 'あ' はUTF-8では3バイトへ変換される
std::size_t n = std::c32rtomb(buffer, U'あ', &state);
std::printf("%zu\n", n);
}
出力例
3
バージョン
言語
- C++11
関連項目
mbrtoc32: 逆方向の変換c16rtombc8rtomb: UTF-8文字からの変換std::wcrtomb(): ワイド文字からの変換