函数
<cuchar>

mbrtoc32

size_t mbrtoc32 ( char32_t * pc32, const char * pmb, size_t max, mbstate_t * ps);
将多字节序列转换为 32 位字符
pmb 所指向的多字节字符被转换为一个 32 位字符,并存储在 pc32 所指向的位置。函数返回多字节字符的字节长度(最多为 max)。

如果__STD_UTF_32__宏被定义,则存储在 pc32 的结果字符遵循 UTF-32 编码。

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

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

使用空指针作为 pmb 调用该函数也会重置转换状态,并忽略参数 pc32max(没有字符会存储到 pc32)。

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

参数

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

返回值

pmb 中用于生成 32 位字符的字节数。

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

如果多字节序列需要多于一个char32_t来表示(这在 UTF-32 中是不可能的)且尚未全部存储,则函数返回(size_t)-3并在 pc32 处存储适当的移位字符。下一次使用相同的 ps 参数指向与 pmb 相同的地址调用此函数,将产生表示该多字节序列所需的char32_t字符序列中的下一个字符。

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

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

请注意,size_t 是一个无符号整数类型,因此可能返回的值没有一个是小于零的。

另见