Namespaces
Variants

std:: c8rtomb

From cppreference.net
定义于头文件 <cuchar>
std:: size_t c8rtomb ( char * s, char8_t c8, std:: mbstate_t * ps ) ;
(C++20 起)

将单个码点从UTF-8转换为窄多字节字符表示形式。

如果 s 不是空指针且 c8 是某个码点有效 UTF-8 编码的最后一个码元,该函数将确定存储该码点多字节字符表示所需的字节数(包括任何移位序列,并考虑当前多字节转换状态 * ps ),并将多字节字符表示存储在以 s 指向的首元素的字符数组中,同时根据需要更新 * ps 。此函数最多可写入 MB_CUR_MAX 个字节。

如果 c8 不是表示码点的最终 UTF-8 代码单元,该函数不会向 s 指向的数组写入数据,仅更新 * ps

如果 s 是空指针,该调用等价于 std :: c8rtomb ( buf, u8 ' \0 ' , ps ) (针对某个内部缓冲区 buf )。

如果 c8 是空字符 u8 ' \0 ' ,将存储一个空字节,并在其前插入恢复初始移位状态所需的任何移位序列,同时转换状态参数 * ps 会被更新以表示初始移位状态。

该函数使用的多字节编码由当前生效的 C 语言区域设置指定。

目录

参数

s - 指向用于存储多字节字符的窄字符数组的指针
c8 - 要转换的UTF-8代码单元
ps - 用于解释多字节字符串时使用的转换状态对象的指针

返回值

存储在数组对象中的字节数(包括任何移位序列)。当 c8 不是码点UTF-8表示中的最终代码单元时,该值可能为零。

如果 c8 无效(无法构成对应有效多字节字符的 char8_t 序列),宏 EILSEQ 的值将被存入 errno ,返回 static_cast < std:: size_t > ( - 1 ) ,且转换状态变为未指定。

注释

使用空指针参数作为 s 调用 c8rtomb 时,可能会与同样使用空指针参数作为 s 的其他 c8rtomb 调用产生数据竞争。

示例

参见

(C++20)
将窄多字节字符转换为UTF-8编码
(函数)
(C++11)
将UTF-16字符转换为窄多字节编码
(函数)
C 文档 for c8rtomb