wchar
wchar 模块提供了宽字符处理相关的接口,包括多字节字符与宽字符之间的转换、宽字符串的比较与转换等功能。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| mbsnrtowcs | 多字节序列转换为宽字符(有最大长度限制) |
| wcscoll_l | 采用目前区域的字符排列次序来比较宽字符串 |
| wcsnlen | 返回多字节字符的长度(有最大长度限制) |
| wcsnrtombs | 把数组中存储的编码转换为多字节字符(有最大长度限制) |
| wcsxfrm_l | 根据程序当前的区域选项中的LC_COLLATE来转换宽字符串的前n个字符 |
Functions
mbsnrtowcs
函数声明
size_t mbsnrtowcs(wchar_t *__restrict, const char **__restrict, size_t, size_t, mbstate_t *__restrict)
头文件清单
功能说明
- 将多字节字符序列转换为宽字符序列,受最大输入字节长度限制
- 当输入指针指向NULL时,转换状态被重置为初始状态
- 转换过程中遇到无效多字节序列时停止转换
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| src | const char **__restrict | 指向待转换的多字节字符串的间接指针 | 非空指针,指向有效的多字节字符串 |
| nms | size_t | 从源字符串中最多处理的多字节字节数 | 0 ~ SIZE_MAX |
| len | size_t | 目标宽字符数组的最大容量(宽字符数) | 0 ~ SIZE_MAX |
| ps | mbstate_t *__restrict | 多字节转换状态指针 | NULL 或有效的mbstate_t指针 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| dst | wchar_t *__restrict | 存储转换结果的宽字符数组;可为NULL,为NULL时仅计算所需长度 |
| src | const char **__restrict | 更新为未转换部分的地址;转换失败或遇到空字符时不更新 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| size_t (非负) | 成功转换的宽字符数(不含终止空字符) | 转换成功完成 |
| (size_t)-1 | 转换遇到无效多字节序列 | 输入包含无效的多字节字符,errno设为EILSEQ |
wcscoll_l
函数声明
头文件清单
功能说明
- 根据指定区域设置(locale)的字符排列次序来比较两个宽字符串
- 比较结果受区域设置的LC_COLLATE类别影响
- 当区域设置为"C"或"POSIX"时,等价于wcscmp
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| ws1 | const wchar_t * | 第一个待比较的宽字符串指针 | 非空指针,指向有效的宽字符串 |
| ws2 | const wchar_t * | 第二个待比较的宽字符串指针 | 非空指针,指向有效的宽字符串 |
| loc | locale_t | 指定的区域设置对象 | 有效的locale_t对象 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 小于0的整数 | ws1小于ws2 | 根据区域排列规则ws1排在ws2之前 |
| 0 | ws1等于ws2 | 两个宽字符串在指定区域规则下相等 |
| 大于0的整数 | ws1大于ws2 | 根据区域排列规则ws1排在ws2之后 |
wcsnlen
函数声明
头文件清单
功能说明
- 计算宽字符串的长度,受最大长度限制
- 扫描宽字符串中的字符个数,直到遇到空宽字符或达到最大长度限制
- 不会读取超过maxlen个宽字符
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| s | const wchar_t * | 待计算长度的宽字符串指针 | 非空指针,指向有效的宽字符串 |
| maxlen | size_t | 允许扫描的最大宽字符数 | 0 ~ SIZE_MAX |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| size_t | 宽字符串的长度或maxlen | 若在maxlen个字符内遇到空宽字符,返回实际长度;否则返回maxlen |
wcsnrtombs
函数声明
size_t wcsnrtombs(char *__restrict, const wchar_t **__restrict, size_t, size_t, mbstate_t *__restrict)
头文件清单
功能说明
- 将宽字符序列转换为多字节字符序列,受最大输入宽字符长度限制
- 当输入指针指向NULL时,转换状态被重置为初始状态
- 转换过程中遇到无法转换的宽字符时停止转换
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| src | const wchar_t **__restrict | 指向待转换的宽字符串的间接指针 | 非空指针,指向有效的宽字符串 |
| nwc | size_t | 从源字符串中最多处理的宽字符数 | 0 ~ SIZE_MAX |
| len | size_t | 目标多字节字符数组的最大容量(字节数) | 0 ~ SIZE_MAX |
| ps | mbstate_t *__restrict | 多字节转换状态指针 | NULL 或有效的mbstate_t指针 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| dst | char *__restrict | 存储转换结果的多字节字符数组;可为NULL,为NULL时仅计算所需长度 |
| src | const wchar_t **__restrict | 更新为未转换部分的地址;转换失败或遇到空宽字符时不更新 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| size_t (非负) | 成功转换的多字节字节数(不含终止空字节) | 转换成功完成 |
| (size_t)-1 | 转换遇到无法表示的多字节字符 | 输入包含无法转换的宽字符,errno设为EILSEQ |
wcsxfrm_l
函数声明
头文件清单
功能说明
- 根据指定区域设置的LC_COLLATE类别转换宽字符串,使转换后的字符串通过wcscmp比较的结果与原字符串通过wcscoll_l比较的结果一致
- 转换后的字符串可用于后续的wcscmp比较以替代wcscoll_l
- 当n为0且dest为NULL时,仅返回所需的转换后字符串长度
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| src | const wchar_t *__restrict | 待转换的宽字符串指针 | 非空指针,指向有效的宽字符串 |
| n | size_t | 目标宽字符数组的最大容量(宽字符数) | 0 ~ SIZE_MAX |
| loc | locale_t | 指定的区域设置对象 | 有效的locale_t对象 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| dest | wchar_t *__restrict | 存储转换结果的宽字符数组;可为NULL,为NULL时仅计算所需长度 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| size_t | 转换后的宽字符串长度(不含终止空字符) | 转换成功完成;若返回值大于等于n,则dest中内容未完整存储 |