c16rtomb, c32rtomb 子例程

用途

c16rtombc32rtomb 子例程将 16 位宽字符 (UTF-16) 和 32 位宽字符 (UTF-32) 转换为当前语言环境的相应多字节字符。

标准 C 库 (libc.a)

语法

#include <uchar.h>
size_t c16rtomb (char * restrict s,  char16_t c16,
 mbstate_t * restrict ps);

size_t c32rtomb (char * restrict s,  char32_t c32,
 mbstate_t * restrict ps);

描述

如果 s 参数的值是空指针,那么 c16rtomb 子例程等同于以下调用,其中 buf 是内部缓冲区。
c16rtomb(buf, L'\0', ps) 

如果 s 参数的值不是空指针,那么 c16rtomb 子例程确定表示与 c16 参数指定的宽字符 (包括任何移位序列) 对应的多字节字符所需的字节数,并将多字节字符表示存储在数组中,其中第一个元素由 s 参数指定。

存储的值大于 MB_CUR_MAX 字节的值。

如果 c16 参数的值为空宽字符,那么将存储空字节,前面是恢复初始移位状态所需的任何移位序列,并描述生成的状态为初始转换状态。

如果 s 参数的值是空指针,那么 c32rtomb 子例程等同于以下调用,其中 buf 是内部缓冲区。
c32rtomb(buf, L'\0', ps)

如果 s 参数的值不是空指针,那么 c32rtomb 子例程确定表示与 c32 参数指定的宽字符 (包括任何移位序列) 对应的多字节字符所需的字节数,并将多字节字符表示存储在数组中,其中第一个元素由 s 参数指定。

存储的值大于 MB_CUR_MAX 字节的值。 如果 c32 参数的值是空的宽字符,那么将存储空字节,前面是恢复初始移位状态所需的任何移位序列,并且结果状态描述为初始转换状态。

注: c16rtombc32rtomb 子例程包含 ps 参数,该参数是指向 mbstate_t 值的类型指针,该值指向一个对象,该对象描述关联多字节字符序列的当前转换状态,子例程将根据需要进行更改。 如果 ps 参数是空指针,那么每个子例程都使用自己的内部 mbstate_t 对象。 c16rtombc32rtomb 子例程不会避免数据与对同一子例程的其他调用相冲突。

参数

描述
指定存储多字节字符表示的数组的第一个元素。
c16, c32 表示宽字符序列。
ps 指定多字节转换的状态。

示例

  • 可以按如下所示使用 mbstate_t 指针:
     mbstate_t ss = 0;
    int x = c16rtomb(out, in, &ss);

返回值

c16rtomb 子例程返回数组对象中存储的字节数,包括任何移位序列。

c16 参数的值不是有效的宽字符时,将发生编码错误。 该函数将 EILSEQ 宏的值存储在 errno 变量中,并返回 (size_t) (-1)。 未指定转换状态。

c32rtomb 子例程返回数组对象中存储的字节数,包括任何移位序列。

c32 参数的值不是有效的宽字符时,将发生编码错误。 该函数将 EILSEQ 宏的值存储在 errno 变量中,并返回 (size_t) (-1)。 未指定转换状态。

错误代码

如果设置了以下错误代码,那么 c16rtombc32rtomb 子例程不成功。

描述
EILSEQ 指示无效的多字节字符序列。

文件

uchar.h 文件定义标准宏,数据类型和子例程。