%>
将 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
被设置为 EILSEQ
, state
的值未指定。
备注
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_l
、wcstombs_s 或 _wcstombs_s_l 函数。
要求
例程 | 必需的标头 |
---|---|
%> | C, C++: <uchar.h> |
有关兼容性信息,请参阅兼容性。