std::wcrtomb
STD:
Defined in header | | |
---|---|---|
std::size_t wcrtomb( char* s, wchar_t wc, std::mbstate_t* ps | | |
将宽字符转换为其窄的多字节表示形式。
如果s
不是空指针,函数决定存储多字节字符表示形式所需的字节数。wc
%28包括任何移位序列%29,并将多字节字符表示存储在字符数组中,该字符数组的第一个元素由s
.最多MB_CUR_MAX
这个函数可以写入字节。
如果s
为空指针,则调用等效于std::wcrtomb(buf, L'\0', ps)
用于内部缓冲区buf
...
如果wc为空宽字符L'\0'
,则存储空字节,并在其前面加上恢复初始移位状态和转换状态参数所需的任何移位序列。*ps
更新以表示初始移位状态。
参数
s | - | pointer to narrow character array where the multibyte character will be stored |
---|---|---|
wc | - | the wide character to convert |
ps | - | pointer to the conversion state object used when interpreting the multibyte string |
返回值
成功后,返回字节数%28,包括写入字符数组的任何移位序列%29,该字符数组的第一个元素由s
...
关于故障%28wc不是有效的宽字符%29,返回static_cast<std::size_t>(-1)、商店EILSEQ在errno,还有树叶*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'
int 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
二次
另见
wctomb | converts a wide character to its multibyte representation (function) |
---|---|
mbrtowc | converts the next multibyte character to wide character, given state (function) |
do_out virtual | converts a string from internT to externT, such as when writing to file (virtual protected member function of std::codecvt) |
C文档
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。