<wctype.h> -- 类型
阅读:0       作者:严长生

wctrans_t 用来表示宽字符转换的标量类型

wctrans_t 是一个通过 typedef 定义的标量类型,它用来表示宽字符的转换。

一个宽字符可以是大写字母、小写字母、十进制数字、空白符、可打印字符等不同的分类,其中大写字母和小写字母之间可以相互转换。

C语言支持全球的语言系统,可以处理英文、中文、日文、韩文、德语、法语、拉丁文、希腊文等。在英文以外的语言环境中,可能会包含更多的字符转换,例如日语中还有平假名、片假名、汉字之间的转换。
我们可以通过 setlocale() 函数进行地域设置,改变程序的语言环境,让程序使用 ASCII 以外的字符集,例如 utf-8(简体中文)、BIG5(繁体中文)、Shift-JIS(日文)、Unicode(世界统一码) 等。
我们可以用文本(字符串)来描述字符的转换,也可以用标量(一般是整数)来描述字符的转换,文本和标量是一一对应的。就像班级里的学生,我们可以喊他的名字(文本),也可以喊他的学号(标量),这两种方式都能够找到唯一的学生。

例如,可以用"toupper"这段文本来表示转换为大写字母,还可以用100这个整数来表示转换为大写字母,此时"toupper"100就是对应的。

对于用户来说,文本比标量更加直观,更加容易记忆;对于编程语言来说,标量比文本更加容易处理,计算机底层都是整数。

虽然字符的分类可能有几十种,但是有效的字符转换形式却很少。在英文环境中,只有大小写字母的转换;在日语环境中,除了大小写字母的转换,还可以在平假名、片假名和汉字之间进行转换。这意味着,字符转换对应的标量值也就有数的几个。

C语言标准规定,wctrans_t 这种标量类型要足够容纳有数的这几个标量值。大部分标准库都将 wctrans_t 实现为整数类型(int、long等),这是绰绰有余的。

标量和文本之间往往没有明确的关联,并且标量的值可能会随着不同的库实现、不同的区域设置而变化,要想让用户记住标量的值是不现实的。这样一来就必须提供一个函数,让用户可以通过这个函数获取文本对应的标量,wctrans() 就是干这件事的:我们可以给 wctrans() 传递一个用文本表示的字符转换,它会返回一个用标量表示的字符转换。