%>

将 UTF-16 或 UTF-32 宽字符转换为 UTF-8 多字节字符。

语法

size_t c16rtomb(
    char *mbchar,
    char16_t wchar,
    mbstate_t *state
);
size_t c32rtomb(
    char *mbchar,
    char32_t wchar,
    mbstate_t *state
);

参数

mbchar
指向用于存储转换后的 UTF-8 多字节字符的数组的指针。

wchar
要转换的宽字符。

state
指向 mbstate_t 对象的指针。

返回值

数组对象中存储的字节数 mbchar包括任何位移序列。 如果 wchar 不是有效的宽字符,则将返回 (size_t)(-1) 值, errno 被设置为 EILSEQstate 的值未指定。

备注

c16rtomb 函数将 UTF-16 LE 字符 wchar 转换为等效 UTF-8 多字节窄字符序列。 如果 mbchar 不是空指针,函数会在 mbchar 指向的数组对象中存储转换后的序列。 MB_CUR_MAX 中最多可存储 mbchar个字节, state 被设置为生成的多字节位移状态。

如果 wchar 是 null 宽字符,则会存储还原初始移位状态所需的序列,如果需要,后面跟空字符。 state 设置为初始转换状态。 c32rtomb 函数完全相同,但它转换的是 UTF-32 字符。

如果 mbchar 是 null 指针,该行为对于 mbchar 相当于调用替换内部缓冲区的函数,对于 wchar相当于宽 null 字符。

state 转换状态对象让你可以后续调用此函数和维持多字节输出字符的位移状态的其他可重启函数。 混合使用可重启函数和不可重启函数时,结果不确定。

若要将 UTF-16 字符转换为非 UTF-8 多字节字符,请使用 wcstombs_wcstombs_lwcstombs_s 或 _wcstombs_s_l 函数。

要求

例程 必需的标头
%> C, C++: <uchar.h>

有关兼容性信息,请参阅兼容性

另请参阅

数据转换
区域设置
多字节字符序列的解释
%>
wcrtomb
wcrtomb_s