名前空間
変種
操作

std::mbrtowc

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

                     const char* s,
                     std::size_t n,

                     std::mbstate_t* ps );

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

もし s がヌルポインタでない場合、バイト列 s が指す位置から始まる、最大 n バイトのマルチバイト文字文字列を調べ、次のマルチバイト文字を完成させるのに必要なバイト数(シフトシーケンスを含む)を決定します。関数が s 内の次のマルチバイト文字が完全で有効であると判断した場合、それを対応するワイド文字に変換し、*pwcpwc がヌルでない場合)に格納します。

もし s がヌルポインタの場合、npwc の値は無視され、呼び出しは std::mbrtowc(nullptr, "", 1, ps) と等価になります。

生成されたワイド文字がヌル文字の場合、*ps に格納されている変換状態は初期シフト状態になります。

目次

[編集] パラメータ

pwc - 結果のワイド文字が書き込まれる場所へのポインタ
s - 入力として使用されるマルチバイト文字列へのポインタ
n - 検査できるs内のバイト数の制限
ps - マルチバイト文字列の解釈に使用される変換状態へのポインタ

[編集] 戻り値

以下が適用される場合、最初のもの

  • 0 : s から変換された文字(非ヌルの場合は pwc に格納される)がヌル文字だった場合。
  • sから正常に変換されたマルチバイト文字のバイト数[1...n]
  • static_cast<std::size_t>(-2) : 次の n バイトが、不完全だが現時点では有効なマルチバイト文字を構成する場合。何も *pwc には書き込まれません。
  • static_cast<std::size_t>(-1) : エンコーディングエラーが発生した場合。何も *pwc には書き込まれず、値 EILSEQerrno に格納され、*ps の値は未指定のままになります。

[編集]

#include <clocale>
#include <cstring>
#include <cwchar>
#include <iostream>
 
void print_mb(const char* ptr)
{
    std::mbstate_t state = std::mbstate_t(); // initial state
    const char* end = ptr + std::strlen(ptr);
    int len;
    wchar_t wc;
    while ((len = std::mbrtowc(&wc, ptr, end-ptr, &state)) > 0)
    {
        std::wcout << "Next " << len << " bytes are the character " << wc << '\n';
        ptr += len;
    }
}
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    const char* str = "z\u00df\u6c34\U0001d10b"; // or u8"zß水𝄋"
                      // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b";
    print_mb(str);
}

出力

Next 1 bytes are the character z
Next 2 bytes are the character ß
Next 3 bytes are the character 水
Next 4 bytes are the character 𝄋

[編集] 関連項目

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