std::mbsrtowcs
From cppreference.com
| ヘッダ <cwchar> で定義 |
||
| std::size_t mbsrtowcs( wchar_t* dst, const char** src, |
||
指定された変換状態*psから始まる、NULL終端のマルチバイト文字シーケンスを、*srcが指す配列からワイド文字表現に変換します。 dstがNULLでない場合、変換された文字はdstが指すwchar_t配列の連続する要素に格納されます。宛先配列には、len個を超えるワイド文字は書き込まれません。
各マルチバイト文字は、std::mbrtowcを呼び出すかのように変換されます。変換は次の場合に停止します。
- マルチバイトNULL文字が変換および格納された。 srcはNULLポインタに設定され、
*psは初期シフト状態を表します。 - 無効なマルチバイト文字(現在のCロケールに従って)が検出された。 srcは、変換されていない最初のマルチバイト文字の先頭を指すように設定されます。
- 次に格納されるワイド文字がlenを超える場合。 srcは、変換されていない最初のマルチバイト文字の先頭を指すように設定されます。 dstがNULLポインタの場合、この条件はチェックされません。
目次 |
[編集] パラメータ
| dst | - | 結果が格納されるワイド文字配列へのポインタ |
| src | - | NULL終端のマルチバイト文字列の最初の要素へのポインタへのポインタ |
| len | - | dstが指す配列で利用可能なワイド文字数 |
| ps | - | 変換状態オブジェクトへのポインタ。 |
[編集] 戻り値
成功した場合、終端のL'\0'を除いて、文字配列に書き込まれたワイド文字数を返します。 dstがNULLポインタの場合、無制限の長さで書き込まれたであろうワイド文字数を返します。
変換エラーの場合(無効なマルチバイト文字が検出された場合)、static_cast<std::size_t>(-1)を返し、EILSEQをerrnoに格納し、*psを未指定の状態のままにします。
[編集] 注記
この関数は、変換されたマルチバイト文字列の末尾にsrcポインタを移動させます。 dstがNULLポインタの場合は、これは発生しません。
[編集] 例
このコードを実行
#include <clocale> #include <cwchar> #include <iostream> #include <vector> void print_as_wide(const char* mbstr) { std::mbstate_t state = std::mbstate_t(); std::size_t len = 1 + std::mbsrtowcs(nullptr, &mbstr, 0, &state); std::vector<wchar_t> wstr(len); std::mbsrtowcs(&wstr[0], &mbstr, wstr.size(), &state); std::wcout << "Wide string: " << &wstr[0] << '\n' << "The length, including '\\0': " << wstr.size() << '\n'; } int main() { std::setlocale(LC_ALL, "en_US.utf8"); const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌" print_as_wide(mbstr); }
出力
Wide string: zß水🍌 The length, including '\0': 5
[編集] 関連項目
| 与えられた状態で、次のマルチバイト文字をワイド文字に変換する (関数) | |
| 与えられた状態で、ワイド文字列をナローマルチバイト文字列に変換する (関数) | |
| [virtual] |
ファイルからの読み込み時など、ExternT から InternT への文字列を変換します。( std::codecvt<InternT,ExternT,StateT> の virtual protected メンバ関数) |
| Cドキュメント mbsrtowcs
| |