Namespaces
Variants

c8rtomb

From cppreference.net
定义于头文件 <uchar.h>
size_t c8rtomb ( char * restrict s, char8_t c8, mbstate_t * restrict ps ) ;
(C23 起)

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

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

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

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

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

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

目录

参数

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

返回值

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

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

注释

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

示例

参考文献

  • C23 标准 (ISO/IEC 9899:2024):
  • 7.30.1.2 c8rtomb 函数

参见

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