char 是 System . Char 结构类型的别名,表示 Unicode UTF-16 字符。

类型范围大小.NET 类型
charU + 0000 ~ U + FFFF16 位System . Char

char 的默认值是 U + 0000,即 \0。
char 可以进行比较(相等和大小),增量或减量等运算。对 char 进行算数或逻辑位运算,返回一个 int 类型的结果。
string(字符串)实际是 char 值的序列。


文本

可以使用下列方式指定 char 值:

  • 字符文本(单个字符并用单引号“'”引起来)
  • Unicode 转义序列,\u 后表示字符代码的十六进制表示形式(四个符号)
  • 十六进制转移序列,\x 后字符代码的十六进制表示形式

    “我”字符的四种表示方式

char [ ] zfs = 
        [
        '我' ,
        '\u6211' ,
        '\x6211' ,
        (char)25105 ,
        ];
Console . WriteLine ( string . Join ( "," , zfs ) );

上例输出:
我,我,我,我
上例中的 char 数组即为“我”的四种表示方式。其中 \u 前缀是 Unicode 转义序列,必须指定全部四位 16 进制值;\x 前缀是 16 进制转义序列,若有可以省略前导零(007A、07A、7A 均可,且对应的是一个字符 z)。
(char)25105 即 6211(十六进制)的十进制表示形式 25,105 强制转换为 char。任意整型数或者浮点数(不能是负数)都可以强制转换为 char,除非该数实际处于 uint16 . MaxValue 之外。


char 转换为 数值

你若问我“我”那个 6211(16)和 25105(10)是咋来的,那就是 char 可以隐式转换为除 byte、sbyte 和 short 之外的任意数值类型(包括浮点数和 decimal),或者强制转换为上述任意数值类型。
例如:

int zfWo = '我'; // 好像很难理解,但确实可行……
Console . WriteLine ( $"{zfWo} → {zfWo:X4}" );

上例即输出:
25105 → 6211
即“我”字符为 \u6211、\x6211 或 (char)25105。


255 个 ASCII 字符

现在我们一起看看 255 个 ASCII 字符都是啥!例子中,我并没有区别每个控制字符的作用(详见 ASCII 表),只使用“控”代替它。否则将会在输出某个控制字符时中断,例如 ESC。仅仅是把非控制字符(字母、数字、标点)等打印出来,并标明其 ASCII 码值。

List<string> Zfs = new ( ); // 声明 List 存储每个 ASCII (string)
for ( int i = 0 ; i <= 255 ; i++ )
    {
        if ( char . IsControl ( ( char ) i ) )
        {
            Zfs . Add ( "控" ); // 如果该字符是控制字符,将添加“控”
          }
          else if (char . IsWhiteSpace ( ( char) i ) )
      {
      Zfs . Add ( "空" ); // 如果该字符是空格,将添加“空”
      }
      else
          {
          Zfs . Add ( ( ( char ) i ) . ToString ( ) ); // 否则就添加实际的 ASCII 字符
          }
    }

下面我们输出扩展的 ASCII 码表:

for ( int i = 0 ; i <= 255 ; i++ )
    {
    if ( ( ( i + 1 ) % 5 == 0 & i != 0 ) | ( i == 255 ) ) // 确保 i + 1 整除 5 == 0,且 i != 0;或者 i == 255,此时是 WriteLine(输出之后添加换行符),这样每行输出 5 个 ASCII
        Console .WriteLine ( $"{i:000}:{Zfs [ i ]}" );
    else // 否则使用 Write,不添加换行符,但指定每个字符后面添加两个制表符(\t)
        Console .Write ( $"{i:000}:{Zfs [ i ]}\t\t" );
    }

输出结果:
000:控 001:控 002:控 003:控 004:控
005:控 006:控 007:控 008:控 009:控
010:控 011:控 012:控 013:控 014:控
015:控 016:控 017:控 018:控 019:控
020:控 021:控 022:控 023:控 024:控
025:控 026:控 027:控 028:控 029:控
030:控 031:控 032:空 033:! 034:"
035:# 036:$ 037:% 038:& 039:'
040:( 041:) 042:* 043:+ 044:,
045:- 046:. 047:/ 048:0 049:1
050:2 051:3 052:4 053:5 054:6
055:7 056:8 057:9 058:: 059:;
060:< 061:= 062:> 063:? 064:@
065:A 066:B 067:C 068:D 069:E
070:F 071:G 072:H 073:I 074:J
075:K 076:L 077:M 078:N 079:O
080:P 081:Q 082:R 083:S 084:T
085:U 086:V 087:W 088:X 089:Y
090:Z 091:[ 092:\ 093:] 094:^
095:_ 096:` 097:a 098:b 099:c
100:d 101:e 102:f 103:g 104:h
105:i 106:j 107:k 108:l 109:m
110:n 111:o 112:p 113:q 114:r
115:s 116:t 117:u 118:v 119:w
120:x 121:y 122:z 123:{ 124:|
125:} 126:~ 127:控 128:控 129:控
130:控 131:控 132:控 133:控 134:控
135:控 136:控 137:控 138:控 139:控
140:控 141:控 142:控 143:控 144:控
145:控 146:控 147:控 148:控 149:控
150:控 151:控 152:控 153:控 154:控
155:控 156:控 157:控 158:控 159:控
160:空 161:? 162:¢ 163:£ 164:¤
165:¥ 166:| 167:§ 168:¨ 169:?
170:a 171:? 172:? 173:- 174:?
175:ˉ 176:° 177:± 178:2 179:3
180:′ 181:μ 182:? 183:· 184:?
185:1 186:o 187:? 188:? 189:?
190:? 191:? 192:à 193:á 194:?
195:? 196:? 197:? 198:? 199:?
200:è 201:é 202:ê 203:? 204:ì
205:í 206:? 207:? 208:D 209:?
210:ò 211:ó 212:? 213:? 214:?
215:× 216:? 217:ù 218:ú 219:?
220:ü 221:Y 222:T 223:? 224:à
225:á 226:a 227:? 228:? 229:?
230:? 231:? 232:è 233:é 234:ê
235:? 236:ì 237:í 238:? 239:?
240:e 241:? 242:ò 243:ó 244:?
245:? 246:? 247:÷ 248:? 249:ù
250:ú 251:? 252:ü 253:y 254:t
255:?

输出中的码值 127 之后的“?”只是扩展后的 ASCII 码表中有无法在控制台显示的字符,你可以转移到窗体应用程序试一下。


兔子码农
2 声望1 粉丝

一个酒晕子