[ Web Proxy ]
URL:
Viewing: https://ru.cppreference.com/cpp/string/multibyte/mbrtoc32 [Back]  [Original]

std::mbrtoc32 cppreference.com
cppreference.com

std::mbrtoc32

cppreference.com
<tbody> </tbody>
std::size_t mbrtoc32( char32_t* pc32, const char* s, std::size_t n, std::mbstate_t* ps );
( C++11)

UTF-32.

s , n , , s, , ( ). , s , 32- *pc32 ( pc32 ).

*s -char32_t ( UTF-32), *ps , mbrtoc32 char32_t, *s.

s , n pc32 , std::mbrtoc32(nullptr, "", 1, ps).

, *ps .

, , C.

pc32 , 32-
s ,
n s,
ps ,

:

  • 0, , s ( *pc32, ), .
  • [1...n] , s.
  • -3, char32_t -char32_t *pc32. .
  • -2, n , . *pc32 .
  • -1, . *pc32 , EILSEQ errno, *ps .

#include <cassert>
#include <clocale>
#include <cstring>
#include <cuchar>
#include <cwchar>
#include <iomanip>
#include <iostream>

int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");

    std::string str = "z\u00df\u6c34\U0001F34C"; // or u8"z"

    std::cout << " " << str.size() << " : [ " << std::showbase;
    for (unsigned char c : str)
        std::cout << std::hex << +c << ' ';
    std::cout << "]\n";

    std::mbstate_t state{}; //     
    char32_t c32;
    const char *ptr = str.c_str(), *end = str.c_str() + str.size() + 1;

    while (std::size_t rc = std::mbrtoc32(&c32, ptr, end - ptr, &state))
    {   
        std::cout << " UTF-32 : " << std::hex
                  << static_cast<int>(c32) << "   ";
        assert(rc != (std::size_t) - 3); //    UTF-32
        if (rc == (std::size_t) - 1)
            break;
        if (rc == (std::size_t) - 2)
            break;
        std::cout << std::dec << rc << "  [ ";
        for (std::size_t n = 0; n < rc; ++n)
            std::cout << std::hex << +static_cast<unsigned char>(ptr[n]) << ' ';
        std::cout << "]\n";
        ptr += rc;
    }
}

:

 10 : [ 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c ]
 UTF-32 : 0x7a   1  [ 0x7a ]
 UTF-32 : 0xdf   2  [ 0xc3 0x9f ]
 UTF-32 : 0x6c34   3  [ 0xe6 0xb0 0xb4 ]
 UTF-32 : 0x1f34c   4  [ 0xf0 0x9f 0x8d 0x8c ]

(C++11)
32-
() []
[virtual]
externT internT, ,
:
converts a string from externT to internT, such as when reading from file
Google.
. .

(virtual protected std::codecvt -) []
C mbrtoc32

Web Proxy Viewer  |  New URL  |  Original Page