std:: wcrtomb
|
定義済みヘッダー
<cwchar>
|
||
|
std::
size_t
wcrtomb
(
char
*
s,
wchar_t
wc,
std::
mbstate_t
*
ps
)
;
|
||
ワイド文字をそのナローマルチバイト表現に変換します。
s が null ポインタでない場合、この関数は wc のマルチバイト文字表現を格納するために必要なバイト数(シフトシーケンスを含み、現在のマルチバイト変換状態 * ps を考慮して)を決定し、マルチバイト文字表現を s が指す先頭要素の文字配列に格納し、必要に応じて * ps を更新します。この関数によって書き込まれるバイト数は最大で MB_CUR_MAX です。
s
が null ポインタの場合、この呼び出しは内部バッファ
buf
に対して
std
::
wcrtomb
(
buf, L
'
\0
'
, ps
)
を呼び出すことと等価です。
wcがヌルワイド文字 L ' \0 ' である場合、初期シフト状態を復元するために必要なシフトシーケンスに続けてヌルバイトが格納され、変換状態パラメータ * ps は初期シフト状態を表すように更新されます。
目次 |
パラメータ
| s | - | マルチバイト文字が格納されるナロウ文字配列へのポインタ |
| wc | - | 変換対象のワイド文字 |
| ps | - | マルチバイト文字列を解釈する際に使用される変換状態オブジェクトへのポインタ |
戻り値
成功時は、 s が指す先頭要素を持つ文字配列に書き込まれたバイト数(シフトシーケンスを含む)を返します。
失敗時( wc が有効なワイド文字でない場合)、 static_cast < std:: size_t > ( - 1 ) を返し、 EILSEQ を errno に格納し、 * ps を未規定の状態のままにする。
例
#include <clocale> #include <cwchar> #include <iostream> #include <string> void print_wide(const std::wstring& wstr) { std::mbstate_t state{}; for (wchar_t wc : wstr) { std::string mb(MB_CUR_MAX, '\0'); std::size_t ret = std::wcrtomb(&mb[0], wc, &state); std::cout << "multibyte char " << mb << " is " << ret << " bytes\n"; } } int main() { std::setlocale(LC_ALL, "en_US.utf8"); std::wstring wstr = L"z\u00df\u6c34\U0001f34c"; // or L"zß水🍌" print_wide(wstr); }
出力:
multibyte char z is 1 bytes multibyte char ß is 2 bytes multibyte char 水 is 3 bytes multibyte char 🍌 is 4 bytes
関連項目
|
ワイド文字をマルチバイト表現に変換する
(関数) |
|
|
状態を指定して次のマルチバイト文字をワイド文字に変換する
(関数) |
|
|
[virtual]
|
InternT
から
ExternT
への文字列変換(ファイル書き込み時など)
(
std::codecvt<InternT,ExternT,StateT>
の仮想protectedメンバ関数)
|
|
Cドキュメント
for
wcrtomb
|
|