名前空間
変種
操作

std::wcrtomb

提供: cppreference.com
< cpp‎ | string‎ | multibyte
ヘッダ <cwchar> で定義
std::size_t wcrtomb( char* s, wchar_t wc, std::mbstate_t* ps );

ワイド文字をナローマルチバイト表現に変換します。

s がヌルポインタでなければ、 wc のマルチバイト表現 (あらゆるシフトシーケンスを含み、現在のマルチバイト変換状態 *ps を考慮に入れた) を格納するために必要なバイト数を決定し、そのマルチバイト文字表現を s によって最初の要素が指されている文字配列に格納し、必要に応じて *ps を更新します。 最大 MB_CUR_MAX バイトが書き込まれます。

s がヌルポインタの場合、この呼び出しは何らかの内部バッファ buf に対する std::wcrtomb(buf, L'\0', ps) と同等です。

wc がヌルワイド文字 L'\0' の場合は、初期シフト状態を復元するために必要なあらゆるシフトシーケンスの後にヌルバイトが格納され、変換状態引数 *ps が初期シフト状態を表すように更新されます。

目次

[編集] 引数

s - マルチバイト文字を格納するナロー文字配列を指すポインタ
wc - 変換するワイド文字
ps - マルチバイト文字列を解釈するときに使用される変換状態オブジェクトを指すポインタ

[編集] 戻り値

成功した場合は、最初の要素が s によって指されている文字配列に書き込まれたバイト数 (あらゆるシフトシーケンスを含む) を返します。

失敗した場合 (wc が有効なワイド文字でない) 場合は、 static_cast<std::size_t>(-1) を返し、 EILSEQerrno に格納し、 *ps を未規定の状態にします。

[編集]

#include <iostream>
#include <clocale>
#include <string>
#include <cwchar>
 
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

[編集] 関連項目

ワイド文字をマルチバイト表現に変換します
(関数) [edit]
指定された状態を使用して次のマルチバイト文字をワイド文字に変換します
(関数) [edit]
[仮想]
ファイルを書き込む時などのために、文字列を internT から externT に変換します
(std::codecvtの仮想プロテクテッドメンバ関数) [edit]