在C#中,字符char是Unicode字符,数字范围0~65535(0xFFFF),这和C++的char是不同的。
char字符可隐式转换为ushort、int、uint、long、ulong、float、double、decimal类型。
两个char(或者 char与整数)进行四则运算,相当于整数的四则运算,返回一个Int32。
反斜杠\作为转义字符
某些控制字符 如回车 使用 '\r'来转义表示, 反斜杠(\)使用'\\'。双引号(")使用'\"'来表示
字符char有三种表示法:
1.单引号表示法:如'P','\n','\\'
2.\x开头表示法,后面跟1~4个十六进制:如 '\x0D','\x34E', '\x56FD'
3.\u开头表示法,后面必须有4个十六进制:如'\u0041','\u4e2d'
Visual Studio 2019新建.net 5.0 控制台应用程序CharDemo,输入测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
namespace CharDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("在C#中,字符都是Unicode编码,对应基础数据类型ushort(UInt16)。范围0~65535,即0~0xFFFF");
Console.WriteLine("字符可隐式转换为ushort、int、uint、long、ulong、float、double、decimal类型");
float fTest = 'A';
Console.WriteLine(fTest);
Console.WriteLine($"两个字符进行四则运算,相当于该字符对应的整数的四则运算,因此结果是一个Int32类型:{('A' + '\n').GetType()}");
int testCharAdd = 'A' + 'a';//相当于65+97
Console.WriteLine($"【'A' + 'a'】的结果:(65+97)={testCharAdd}");
char ch = '中';
ushort us = ch;
Console.WriteLine($"Unicode字符【{ch}】对应的数字为:【{us}】=0x{us.ToString("X4")}");
Console.WriteLine($"数字【{us}】对应的低字节在前字节数组为:【{string.Join(" ", BitConverter.GetBytes(us).Select(b => b.ToString("X2")))}】");
Console.WriteLine($"字符实现了IComparable接口,可以与数字进行比较。如【{'\u4E2D' == 0x4e2d}】,比较结果:【{'中'.CompareTo('\x4E2D') == 0}】");
Console.WriteLine("字符有三种表示方法:");
char chShow = 'M';
Console.WriteLine($" 1.单引号表示法:如【'{chShow}'】、【'\\t'】");
chShow = '\x004D';
Console.WriteLine($" 2.\\x开头表示法,后面跟1~4个十六进制:如【'\\x{((ushort)chShow).ToString("X4")}'】");
chShow = '\u004D';
Console.WriteLine($" 3.\\u开头表示法,后面必须有4个十六进制:如【'\\u{((ushort)chShow).ToString("X4")}'】");
Console.WriteLine("查找0~255之间所有的空白字符...");
List<char> list = new List<char>();
for (char c = '\0'; c < 256; c++)
{
if (char.IsWhiteSpace(c))
{
list.Add(c);
}
}
//一个字符串的Trim()函数 就是清除所有起始和终止字符中含有以下字符【9,10,11,12,13,32】
//空白字符 9 【'\t'水平制表符】,10【'\n'换行符】,11'【\v'垂直制表符】,12【'\f'换页符】,13【'\r'回车符】,32【' '键盘Space键】
Console.WriteLine($"空白字符(ASCII)有【{list.Count}】个:{string.Join(",", list.Select(c => (int)c))}");
for (int i = 0; i < 128; i++)
{
Console.WriteLine($"字符的ASCII码是【{i.ToString().PadLeft(3)}】的字符类型是【{char.GetUnicodeCategory((char)i)}】");
}
Console.ReadLine();
}
}
}
测试结果:
字符类型: