最終更新日時(UTC):
が更新

履歴 編集

function
<locale>

std::wstring_convert::from_bytes(C++11)(C++17で非推奨)

wide_string from_bytes(char byte);              // (1)
wide_string from_bytes(const char* ptr);        // (2)
wide_string from_bytes(const byte_string& str); // (3)
wide_string from_bytes(const char* first,
                       const char* last);       // (4)

このクラスはC++17から非推奨となった。

概要

バイト文字列からワイド文字列に変換する。

効果

変換前に、state()メンバ関数が返す状態値が、コンストラクタで明示的に指定されていなかった場合、デフォルト値を設定する。

  • (1) : 1バイトからなる文字を、ワイド文字列に変換する。
  • (2) : バイト文字配列を、ワイド文字列に変換する。
  • (3) : バイト文字列を、ワイド文字列に変換する。
  • (4) : バイト文字の範囲[first, last)を、ワイド文字列に変換する。

変換に成功した場合、成功した要素数が、converted()メンバ関数が返す変数に設定される。

戻り値

変換結果のワイド文字列を返す。

変換に失敗し、コンストラクタでwide_errパラメータ(エラー時に返す文字列)が設定された場合、そのパラメータを返す。

例外

変換に失敗し、コンストラクタでwide_errパラメータ(エラー時に返す文字列)が設定されていなかった場合、std::range_error例外を送出する。

#include <cassert>
#include <string>
#include <locale>
#include <codecvt>
#include <iterator>

int main()
{
  // UTF-8とUTF-32の相互変換を行うコンバーター
  std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> converter;

  // (1)
  // 1バイト文字からワイド文字列に変換
  {
    char input = 'a';
    std::u32string result = converter.from_bytes(input);
    assert(result.size() == 1);
  }

  // (2)
  // バイト文字配列からワイド文字列に変換
  {
    const char input[] = u8"あいうえお";
    std::u32string result = converter.from_bytes(input);
    assert(result.size() == 5);
  }

  // (3)
  // バイト文字列からワイド文字列に変換
  {
    std::string input = u8"あいうえお";
    std::u32string result = converter.from_bytes(input);
    assert(result.size() == 5);
  }

  // (4)
  // バイト文字の範囲からワイド文字列に変換
  {
    const char input[] = u8"あいうえお";
    std::u32string result = converter.from_bytes(std::begin(input), std::end(input) - 1);
    assert(result.size() == 5);
  }
}

出力

バージョン

言語

  • C++11

処理系