C# - char类型的一些介绍
Char
C#里面的char,其实就是System.Char类型的别名,它代表一个Unicode字符(是这样吗?),占用两个字节。
例如:char c = ‘A’;
char占用两个字节,也就是16位,其实本质上char其实就是16位的无符号整型数值,范围是0到65535,也就是和无符号short的范围是一样的。
转义字符
有一些字符无法通过字面的意思来进行解释,这时候就可以使用转义字符。
转义字符是以 / 开始,后边跟着一个有特殊意义的字符。
例如:
char newLine = '\n'; 这个表示换行
char backSlash = '\\'; 这个就表示 \
转义字符的列表如下:

还有\u(\x)这两个转义字符可以让你通过4位16进制的形式来表示任意的Unicode字符,例如:
char copyrightSymbol = '\u00A9'; // ©
char omegaSymbol = '\u03A9'; // Ω
char newLine = '\u000A'; // 换行
转换
char类型的变量可以隐式的转换到可容纳无符号short类型的数值类型,例如:

字符扩展
char只能代表一个Unicode字符, 其实这句话不太准确。
我们知道Unicode里 65 代表着字母 A,但其实65是A的Unicode代码点,通常是这样来表示的 U+0041,16进制的41就是10进制的65。
而看这个例子,德语里面有个字符:ß,它的UniCode是 U+00DF,但就其本身而言,ß 不是一个字母,ß被认为等价于ss(也就是两个s),例如fußball就相当于fussball。
而用在字符/字符串比较的时候,就不可以把ß当作一个字符来处理,而是把ß=ss。
而ß所对应的U+00DF这个代码点就是字符扩展(Character expansion)的一个例子,如果想正确的比较字符/串,那么这个代码点就必须先转化为其它的多个代码点,这里就是 U+00DF -> U+0073 + U+0073,也就是ß -> ss,记住,这只是用于比较,而不是展示。
字符代理
字符代理(char surrogates),和字符扩展正好相反。
字符扩展是指,一个字符代表了多个实际的字符;而字符代理呢,就是使用两个char的实例来表示一个实际的字符。
字符代理之所以存在,是因为它的范围太小了(0-65535),所以根本无法代表世界上这么多语言的字符。实际上Unicode的代码点是从0到1114111(0x10FFFF),所以16位的存储远远不够用。
正是因为这点,Unicode UTF16有一个可以表示所有字符的体系,就是使用两个连续的16位数值来表示,这就叫做代理对(surrogate pairs)。
在这两个连续的16位数值里,第一个数的范围是U+D800到U+DBFF(55296到56319),所以如果您在解析字符/串的时候,解析出来的数值正好落在这个范围里,那么你就需要把这个char和它后边的char连在一起进行解析,才能得出真正要表示的字符。
从术语上讲,第一个16位数叫做High Surrogate(高代理项),第二个数叫做Low Surrogate(低代理项)。
例如:
C# - char类型的一些介绍的更多相关文章
- OCCI处理CHAR类型字符串变量的不同
问题背景: 一个旧应用,原先应用是用proc写的,9i的库,如今应用须要改为使用OCCI,当中有一段查询逻辑:select ... where upper(state)=upper(:1). (此处请 ...
- C++中char类型的溢出问题
C++中什么经常会运用到char类型,也会将char类型作为循环语句的循环条件,但往往这里最容易出现错误,容易出现溢出,进入死循环.这里我们就来简单介绍下为什么会出现这种情况. 首先,了解下char类 ...
- char类型的数值转换
在视频教程中,你已经认识到了数字类型之间.字符串和其他类型之间的转换.而某些时候,我们还需要将char类型转换为int类型,或者把int类型转换为char类型. 这篇文章,将介绍在代码中虽然不太常用, ...
- C语言基础(6)-char类型
1. char常量.变量 使用单引号‘’引起来的就是char的常量 ‘a’是一个char类型的常量 “a”是一个字符串类型的常量 1是一个int型的常量 ‘1’是一个char型的常量 char a; ...
- 在vs中char类型的实参与LPCWSTR类型的形参类型不兼容怎么解决?
今天在做 COS脚本解释器的时候,遇到了这个问题 先了解一下 LPCTCHAR 这个东东 LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么 ...
- 关于各种类型数据char、int、double、float 所占空间长度的计算,而char类型让我长姿势了
#include <iostream> int main() { using namespace std; //int A=10; //double B=6; cout << ...
- unsigned char 类型
在蓝牙4.0的开发中,很多数据类型都用到了 unsigned char ,我觉得用这个类型的一个原因是相比较于整型,它占的空间更少. 比如: unsigned char a = 1; // 占1个字 ...
- char类型输出地址
问题描述: 当输出char的地址时,发现输出的是一个字符: char ch = 'a'; cout<<&ch<<endl;//a @ 因为cout得到一个char类型的 ...
- char类型的说明
CREATE TABLE [dbo].[CharTest]( ) NULL, ) NULL, ) NULL, ) NULL ) insert into dbo.CharTest ( Char, Var ...
随机推荐
- 大话设计模式--访问者模式 Visitor -- C++实现实例
1. 访问者模式: 表示一个作用于某对象结构中的和元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 访问者模式把数据结构和作用于结构上的操作之间的耦合脱开,使得操作集合可以 ...
- ubuntu commands mysql
use table; //选择某个表 show tables; //展现有几个表 select * from table; //显示表内容
- springmvc接受表单多条数据的值
点击下面链接查看具体内容: http://blog.csdn.net/lutinghuan/article/details/46820023
- python再议装饰器
装饰器实质还是一个函数,是对其他函数进行装饰的函数.装饰器函数接受被装饰函数的函数名,返回被装饰函数的函数名.对一个函数进行装饰有两个原则:一是不能修改被装饰函数的源代码:二是被装饰函数的调用方式不可 ...
- C中malloc的使用(转)
malloc函数 原型:extern void *malloc(unsigned int num_bytes); 用法:#include <malloc.h> 功能:分配长度为num_b ...
- 从信用卡欺诈模型看不平衡数据分类(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制。过采样后模型选择RF、xgboost、神经网络能够取得非常不错的效果。(2)模型层面:使用模型集成,样本不做处理,将各个模型进行特征选择、参数调优后进行集成,通常也能够取得不错的结果。(3)其他方法:偶尔可以使用异常检测技术,IF为主
总结:不平衡数据的分类,(1)数据层面:使用过采样是主流,过采样通常使用smote,或者少数使用数据复制.过采样后模型选择RF.xgboost.神经网络能够取得非常不错的效果.(2)模型层面:使用模型 ...
- Java丨jsoup网络爬虫模拟登录思路解析
直奔主题: 本篇文章是给有jsoup抓包基础的人看的...... 今天小编给大家写一篇对于jsoup抓包时需要输入验证码的解决方法之一.大神就绕道,嘿嘿~ 任何抓包的基础都是基于Http协议来进行这个 ...
- png8 png24 png32
解释 PNG8 : 8位的PNG最多支持256(2的8次方)种颜色,8位的PNG支持不透明.索引透明.alpha透明. PNG24 : 支持2的24次方种颜色,表现为不透明.PS导出PNG24是会根据 ...
- 源码安装postgres10 in centos6.4
文件夹路径 程序目录 /usr/pgsql 数据目录/usr/local/pgdata 准备工作 获得源码 mkdir /opt/soft_bak cd /opt/soft_bak wget http ...
- Smali文件添加try/catch语句,出现“invalid use of move-exception”异常
插入代码如下: 捕获到以下异常: 2019-03-18 21:09:35.431 8272-8272/com.xxxx.xxxx E/AndroidRuntime: FATAL EXCEPTION: ...