Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::c32rtomb

      From cppreference.com
      <cpp‎ |string‎ |multibyte
       
       
       
       
      Defined in header<cuchar>
      std::size_t c32rtomb(char* s,char32_t c32,std::mbstate_t* ps);
      (since C++11)

      Converts a UTF-32 character to its narrow multibyte representation.

      Ifs is not a null pointer, the function determines the number of bytes necessary to store the multibyte character representation ofc32 (including any shift sequences, and taking into account the current multibyte conversion state*ps), and stores the multibyte character representation in the character array whose first element is pointed to bys, updating*ps as necessary. At mostMB_CUR_MAX bytes can be written by this function.

      Ifs is a null pointer, the call is equivalent tostd::c32rtomb(buf, U'\0', ps) for some internal bufferbuf.

      Ifc32 is the null wide characterU'\0', a null byte is stored, preceded by any shift sequence necessary to restore the initial shift state and the conversion state parameter*ps is updated to represent the initial shift state.

      The multibyte encoding used by this function is specified by the currently active C locale.

      Contents

      [edit]Parameters

      s - pointer to narrow character array where the multibyte character will be stored
      c32 - the 32-bit character to convert
      ps - pointer to the conversion state object used when interpreting the multibyte string

      [edit]Return value

      On success, returns the number of bytes (including any shift sequences) written to the character array whose first element is pointed to bys. This value may be0, e.g. when processing the firstchar32_t in multi-char32_t-character sequence (does not occur in UTF-32).

      On failure (ifc32 is not a valid 32-bit character), returns-1, storesEILSEQ inerrno, and leaves*ps in unspecified state.

      [edit]Example

      Run this code
      #include <climits>#include <clocale>#include <cuchar>#include <iomanip>#include <iostream>#include <string_view> int main(){std::setlocale(LC_ALL,"en_US.utf8");std::u32string_view strv= U"zß水🍌";// or z\u00df\u6c34\U0001F34Cstd::cout<<"Processing "<< strv.size()<<" UTF-32 code units: [ ";for(char32_t c: strv)std::cout<<std::showbase<<std::hex<<static_cast<int>(c)<<' ';std::cout<<"]\n"; std::mbstate_t state{};char out[MB_LEN_MAX]{};for(char32_t c: strv){std::size_t rc= std::c32rtomb(out, c,&state);std::cout<<static_cast<int>(c)<<" converted to [ ";if(rc!=(std::size_t)-1)for(unsignedchar c8:std::string_view{out, rc})std::cout<<+c8<<' ';std::cout<<"]\n";}}

      Output:

      Processing 4 UTF-32 code units: [ 0x7a 0xdf 0x6c34 0x1f34c ]0x7a converted to [ 0x7a ]0xdf converted to [ 0xc3 0x9f ]0x6c34 converted to [ 0xe6 0xb0 0xb4 ]0x1f34c converted to [ 0xf0 0x9f 0x8d 0x8c ]

      [edit]See also

      (C++11)
      converts a narrow multibyte character to UTF-32 encoding
      (function)[edit]
      [virtual]
      converts a string fromInternT toExternT, such as when writing to file
      (virtual protected member function ofstd::codecvt<InternT,ExternT,StateT>)[edit]
      C documentation forc32rtomb
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/string/multibyte/c32rtomb&oldid=177819"

      [8]ページ先頭

      ©2009-2025 Movatter.jp