mbrtoc16函数
概要:
#include <uchar.h> size_t mbrtoc16(char16_t * restrict pc16, const char * restrict s, size_t n, mbstate_t * restrict ps);
描述:
如果参数s是空指针,mbrtoc16函数等价于
mbrtoc16(NULL, "", 1, ps)
这种情况下,参数pc16和参数n的值将被忽略。
如果参数s不是空指针,函数从参数s指向的字节开始检查最多n个字节,以确定构成一个多字节字符所需的字节数(包括移位序列)。如果函数确定多字节字符是完整并且有效的,函数将确定对应宽字符的值;如果参数pc16不是空指针,函数将存储第一个(或者唯一的)宽字符的值到参数pc16指向的对象中。后续调用函数将存储连续的宽字符,而不会消耗任何额外的输入,直至所有宽字符都已存储。如果对应的宽字符是空宽字符,结果状态将是初始转换状态。
参数:
指向char16_t类型对象的指针。
如果参数pc16是空指针,函数不会存储转换后的结果宽字符,但仍然会返回对应的多字节字符的字节数;如果参数pc16不是空指针,函数将存储转换后的结果宽字符,并返回对应的多字节字符的字节数。
指向多字节字符第一个字节的指针。
最多检查的字节数。
宏MB_CUR_MAX定义了当前语言环境下构成一个多字节字符的最大字节数。
指向mbstate_t类型对象的指针,该对象描述了多字节字符序列的当前转换状态,函数会根据需要对其进行更改。
如果参数ps是空指针,函数会使用内部mbstate_t对象,该对象在程序启动时初始化为初始转换状态;这种情况下,mbrtoc16函数不要求避免与其它mbrtoc16函数调用发生数据竞争。实现应像没有库函数使用ps空指针调用mbrtoc16函数一样。
返回值:
如果接下来的n个字节或者更少字节构成的多字节字符对应的宽字符是空宽字符,函数返回0。
如果接下来的n个字节或者更少字节构成有效的多字节字符,函数返回多字节字符的字节数,其值域区间为[1,n]。
如果前一次调用生成的下一个字符已经被存储(本次调用没有输入字节被消耗。),函数返回(size_t)(-3)。
如果接下来的n个字节不能构成完整的多字节字符(但可能是有效的。),并且所有n个字节都已经被处理(没有值被存储。),函数返回(size_t)(-2)。
注:当参数n值至少为MB_CUR_MAX时,这种情况只有在参数s指向冗余移位序列(redundant shift sequences)时才会发生(实现存在依赖状态的编码。)。
如果接下来的n个字节或者更少字节不能构成完整且有效的多字节字符,将发生编码错误;宏EILSEQ存入errno,并且转换状态是不明确的,函数返回(size_t)(-1)。
范例:
|
|
输出:
转换前UTF-8字符串占有9个字节。
转换后得到5个16位宽字符。
注:使用ideone编译。
相关内容:
c16rtomb | 将16位宽字符转换为多字节字符序列的函数。 |
mbrtoc32 | 将多字节字符序列转换为32位宽字符的函数。 |
c32rtomb | 将32位宽字符转换为多字节字符序列的函数。 |