Namespaces
Variants

std::wstring_convert<Codecvt,Elem,Wide_alloc,Byte_alloc>:: from_bytes

From cppreference.net
ヘッダーで定義 <locale>
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)

cvtptr が指すファセットを使用して、バイトシーケンスをワイド文字列に変換します。

1) バイトシーケンスは単一の要素のみで構成される byte
2) バイトシーケンスは、 ptr から始まるnull終端シーケンスです。
3) バイトシーケンスは、 str に含まれるシーケンスです。
4) バイトシーケンスは範囲 [ first , last ) です。

変換が開始される前に、 * this がコンストラクタのオーバーロード (3) で構築され ていない 場合、 cvtstate はデフォルト値(初期変換状態)に設定されます。

入力要素の変換に成功した数は、 cvtcount に格納されます。

目次

戻り値

変換が成功した場合、変換結果を返します。それ以外の場合、 * this がコンストラクタのオーバーロード (4) で構築されている場合は、 wide_err_string を返します。

例外

変換が失敗し、かつ * this がコンストラクタオーバーロード (4) で構築され なかった 場合、 std::range_error をスローします。

#include <codecvt>
#include <cstdint>
#include <iostream>
#include <locale>
#include <string>
int main()
{
    std::string utf8 = "z\u00df\u6c34\U0001d10b"; // or u8"zß水𝄋"
                 // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b";
    // the UTF-8 / UTF-16 standard conversion facet
    std::u16string utf16 = 
        std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,
                             char16_t>{}.from_bytes(utf8.data());
    std::cout << "UTF-16 conversion produced " << utf16.size()
              << " code units: " << std::showbase;
    for (char16_t c : utf16)
        std::cout << std::hex << static_cast<std::uint16_t>(c) << ' ';
    // the UTF-8 / UTF-32 standard conversion facet
    std::u32string utf32 =
        std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t>{}.from_bytes(utf8);
    std::cout << "\nUTF-32 conversion produced " << std::dec
              << utf32.size() << " code units: ";
    for (char32_t c : utf32)
        std::cout << std::hex << static_cast<std::uint32_t>(c) << ' ';
    std::cout << '\n';
}

出力:

UTF-16 conversion produced 5 code units: 0x7a 0xdf 0x6c34 0xd834 0xdd0b
UTF-32 conversion produced 4 code units: 0x7a 0xdf 0x6c34 0x1d10b

関連項目

ワイド文字列をバイト文字列に変換する
(公開メンバ関数)
状態を指定してナローマルチバイト文字列をワイド文字列に変換する
(関数)
[virtual]
ExternT から InternT への文字列変換(ファイルからの読み込み時など)
( std::codecvt<InternT,ExternT,StateT> の仮想保護メンバ関数)