Localization library | |||||||||||||||||||||||||
Regular expressions library(C++11) | |||||||||||||||||||||||||
Formatting library(C++20) | |||||||||||||||||||||||||
Null-terminated sequence utilities | |||||||||||||||||||||||||
Byte strings | |||||||||||||||||||||||||
Multibyte strings | |||||||||||||||||||||||||
Wide strings | |||||||||||||||||||||||||
Primitive numeric conversions | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Text encoding identifications | |||||||||||||||||||||||||
|
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 |
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 |
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.
#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 ]
(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 of std::codecvt<InternT,ExternT,StateT> )[edit] |
C documentation forc32rtomb |