函数
<cuchar>

mbrtoc16

size_t mbrtoc16 ( char16_t * pc16, const char * pmb, size_t max, mbstate_t * ps);
将多字节序列转换为 16 位字符
pmb 所指向的多字节字符被转换为 16 位字符,并存储在 pc16 指向的位置。函数返回多字节字符的字节长度(最大为 max)。

如果__STD_UTF_16__宏被定义,则存储在 pc16 的结果字符遵循 UTF-16 编码。

该函数使用(并更新)由 ps 描述的转换状态。如果 ps 是一个空指针,该函数使用其自己的内部转换状态,该状态仅在调用此函数时根据需要进行更改。

如果获取的字符等同于空 16 位字符,函数会重置移位状态并返回零(在将空 16 位字符存储到 pc16 之后)。

使用空指针作为 pmb 调用该函数也会重置移位状态,并忽略参数 pc16max(没有字符存储在 pc16)。

这是char16_t版本的 mbrtowc (<cwchar>)。

参数

pc16
指向一个char16_t.
类型对象的指针。或者,此参数可以是一个空指针,在这种情况下,函数不存储char16_t的转换,但仍然返回字符的字节长度。
pmb
指向多字节字符第一个字节的指针。
或者,可以使用空指针调用该函数,在这种情况下,函数将转换状态(ps 或其内部状态)重置为初始状态并返回零。
max
pmb 读取的最大字节数。
宏常量 MB_CUR_MAX 定义了在当前区域设置下,一个多字节字符可以包含的最大字节数。
size_t 是一个无符号整数类型。
ps
指向一个定义转换状态的 mbstate_t 对象的指针。

返回值

pmb 中用于产生 16 位字符的字节数。

如果这是空 16 位字符,或者 pmb 是一个空指针,函数返回零(在第一种情况下,空 16 位字符被存储在 pc16)。

如果多字节序列需要多于一个char16_t来表示,并且并非所有字符都已被存储,函数返回(size_t)-3,在将适当的移位字符存储到 pc16 之后。下一次使用相同的 ps 参数指向与 pmb 相同的地址来调用此函数时,将产生表示该多字节序列所需的char16_t字符序列中的下一个字符。

如果 pmb 的前 max 个字符构成一个不完整(但可能有效)的多字节字符,函数返回(size_t)-2(没有值被存储在 pc16)。

否则,如果 pmb 指向的字符不构成一个有效的多字节字符(或其开头部分),函数返回(size_t)-1并设置 errnoEILSEQ(没有值被存储在 pc16)。

请注意,size_t 是一个无符号整数类型,因此任何可能返回的值都不会小于零。

另见