名前空間
変種
操作

std::wcsrtombs

From cppreference.com
< cpp‎ | string‎ | multibyte
 
 
 
 
ヘッダ <cwchar> で定義
std::size_t wcsrtombs( char* dst,

                       const wchar_t** src,
                       std::size_t len,

                       std::mbstate_t* ps );

*src が指す配列から、*ps で記述された変換状態から始まる、ワイド文字のシーケンスを、そのマルチバイト文字列表現に変換します。 dst がヌルポインタでない場合、変換された文字は dst が指す char 配列の連続する要素に格納されます。変換先の配列には、len バイトを超えて書き込まれません。

std::wcrtomb の呼び出しのように、各文字が変換されます。変換は、以下のいずれかの条件で停止します。

  • ヌル文字が変換され、格納された場合。 src はヌルポインタに設定され、*ps は初期シフト状態を表します。
  • 現在の C ロケールで有効な文字に対応しない wchar_t が見つかった場合。 src は、変換されなかった最初のワイド文字を指すように設定されます。
  • 次に格納されるマルチバイト文字が len を超える場合。 src は、変換されなかった最初のワイド文字を指すように設定されます。 dst がヌルポインタである場合、この条件はチェックされません。

目次

[編集] パラメータ

dst - マルチバイト文字が格納される、ワイド文字配列へのポインタ
src - ヌル終端ワイド文字列の最初の要素へのポインタへのポインタ
len - dst が指す配列で利用可能なバイト数。
ps - 変換状態オブジェクトへのポインタ。

[編集] 戻り値

成功した場合、 dst が指す文字配列に書き込まれたバイト数(シフトシーケンスを含むが、終端の '\0' を除く)を返します。 dst がヌルポインタの場合、書き込まれたであろうバイト数(こちらも終端のヌル文字 '\0' を除く)を返します。

変換エラーの場合(無効なワイド文字が検出された場合)、 static_cast<std::size_t>(-1) を返し、 *ps は未規定の状態になります。

[編集]

#include <clocale>
#include <cwchar>
#include <iostream>
#include <string>
#include <vector>
 
void print_wide(const wchar_t* wstr)
{
    std::mbstate_t state = std::mbstate_t();
    std::size_t len = 1 + std::wcsrtombs(nullptr, &wstr, 0, &state);
    std::vector<char> mbstr(len);
    std::wcsrtombs(&mbstr[0], &wstr, mbstr.size(), &state);
    std::cout << "multibyte string: " << &mbstr[0] << '\n'
              << "Length, including '\\0': " << mbstr.size() << '\n';
}
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // or L"zß水𝄋"
    print_wide(wstr);
}

出力

multibyte string: zß水𝄋
Length, including '\0': 11

[編集] 関連項目

与えられた状態で、ワイド文字をそのマルチバイト表現に変換する
(関数) [編集]
与えられた状態で、ナローマルチバイト文字列をワイド文字列に変換する
(関数) [編集]
[virtual]
ファイルへの書き込み時など、InternT から ExternT への文字列を変換します。
(std::codecvt<InternT,ExternT,StateT> の virtual protected メンバ関数) [編集]
C ドキュメント for wcsrtombs
English 日本語 中文(简体) 中文(繁體)