首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::wcrtomb

Defined in header <cwchar>

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)、商店EILSEQerrno,还有树叶*ps处于未指定的状态。

二次

代码语言:javascript
复制
#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);
}

二次

产出:

二次

代码语言:javascript
复制
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文档

代码语言:txt
复制
 © cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券