C#中的char类型对应.NET中的System.Char,它表示 Unicode UTF-16 字符。要了解char,我们必须先了解什么是Unicode UTF-16 。

先说说ASCII码,自第一台计算机诞生于美国后,人们将英语大小写字母、数字、常用符号与二进制位之间的关系做了统一规定,并制定了一套字符编码规则,这套编码规则被称为ASCII编码。ASCII 编码一共定义了128个字符的编码规则,用七位二进制表示 ( 0x00 - 0x7F ),这些字符组成的集合就叫做 ASCII 字符集。

char数据类型_ico

后来,各个国家都有一些类似的符号编码集,为了统一,就制定了Unicode编码。

Unicode叫统一码,统一码是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。UTF是Unicode Transfer Format的缩写,即把Unicode转做某种格式的意思。UTF-16是Unicode的其中一个使用方式。它表示的范围U+0000 到 U+FFFF,也就是说,可以容纳65535个字符,这几乎将地球上的各种字符一网打尽了,而这也是C#中的char表示的范围。char 类型的默认值为 \0,即 U+0000。

字符和字符串的区别

char只能表示一个字符,而多个char就可以组成一个字符串,在C#中,使用string关键字声明一个字符串,它们两者的关系是:字符串类型将文本表示为 char 值的序列。

声明和初始化

char code1 = 'a';//字符文本

声明并初始化一个char有4种方法,常用的是直接给出字符文本或使用转义字符。观察下面的例子

internal class Program
 
 {
 
     static void Main(string[] args)
 
     {
 
         int number = 97;
 
         char code1 = 'a';//字符文本
 
         char code2 = '\x0061';//16进制
 
         char code3 = '\u0061';//16进制
 
         char code4 = (char)number;//10进制
 
         char min = char.MinValue;
 
         char max = char.MaxValue;
 
         Console.WriteLine($"code1={code1}");
 
         Console.WriteLine($"code2={code2}");
 
         Console.WriteLine($"code3={code3}");
 
         Console.WriteLine($"code4={code4}");
 
         Console.WriteLine($"MinValue=[{min}]");
 
         Console.WriteLine($"MaxValue=[{max}]");
 
         Console.WriteLine($"将int类型的{number}转化为char类型的{code4}");  
 
  
 
         var v = Console.ReadKey();
 
     }

输出结果

code1=a
code2=a
code3=a
code4=a
MinValue=[ ]
MaxValue=[?]
将int类型的97转化为char类型的a

结论

char由于可以表示的范围是0x0000-0xffff这么多的字节,即0-65535的范围,说明它本质上也是一个ushort型,占2个字节。它的第一字符为'\0',表示一个空格,最后一个字符为'\uffff',表示?(问号)。设计这个编码的人挺可爱,以空格开头,就像有生于无,而以一个大大的问号结尾,代表对计算机的无尽探索。

题外话:在C或C++语言中,char只占1个字节,所以它只能表达256个字符。

——重庆教主 2023年12月25日