mbtowc函数
概要:
#include <stdlib.h> int mbtowc(wchar_t * restrict pwc, const char * restrict s, size_t n);
描述:
该函数将多字节字符序列转换为宽字符。
如果参数s不是空指针,函数从参数s指向的字节开始最多检查n个字节,以确定构成多字节字符所需的字节数(包括移位序列(shift sequences)。)。如果多字节字符是完整并且有效的,函数将确定对应的宽字符值;如果参数pwc不是空指针,函数将对应宽字符值存入参数pwc指向的对象中。如果对应的宽字符是空宽字符,函数处于初始转换状态(initial conversion state)。
mbtowc函数会受当前语言环境LC_CTYPE类别的影响。函数在程序启动时处于初始转换状态,调用mbtowc(NULL, NULL, 0);可以返回该状态;随后在参数s不是空指针的情况下调用该函数,内部转换状态将根据需要进行改变。改变LC_CTYPE类别会导致函数的转换状态不确定。
实现应像没有库函数调用mbtowc函数一样。
参数:
指向wchar_t类型对象的指针,对应的宽字符将存入该指针指向的对象中。
指向多字节字符第一个字节的指针。
最多检查的字节数。
返回值:
在参数s是空指针的情况下,如果多字节字符的编码与状态有关(state-dependent encodings),函数返回一个非0值;如果多字节字符的编码与状态无关,函数返回0。
在参数s不是空指针的情况下,如果参数s指向空字符,函数返回0;如果参数s指向的不超过n个的字节能够形成有效多字节字符,函数返回多字节字符的字节数;如果不能形成有效多字节字符,函数返回-1。
任何情况下,函数的返回值都不会大于参数n或者宏MB_CUR_MAX。
范例:
|
|
输出:
转换前多字节字符中各个字节的值: E5 AE B6
转换后对应宽字符的值: 5BB6
注:使用ideone编译。
E5 AE B6是汉字家的UTF-8编码;5BB6是汉字家的UTF-16BE编码。
相关内容:
mblen | 确定多字节字符字节数的函数。 |
wctomb | 将宽字符转换为多字节字符序列的函数。 |