2018年1月19日

编码格式

美国人首先使用电脑,他们用8个晶体管的开合来表示不同的状态,2的8次方有256种状态,后来被叫做了“字节”。美国人把0-127号状态表示为控制码、空格、标点、大小写字母,127号以后的空着,这种方案被称作ANSI的ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)。

后来,其它国家也开始使用电脑,他们发现自己的语言在ASCII码中没有,计算机无法保存他们的语言。So sad!他们决定开发ASCII中127号状态后空着的状态位,加入了他们自己国家的字母、符号、下划线、竖线等等,一直到最后的255号,128-255这部分字符集被称为“扩展字符集”。256个位置被用完了。

再后来,第三世界开始使用电脑,电脑来到了中国,可怜的中国人发现电脑不能保存中文字符,而且已经没有空余的状态使用了,况且中文有6000多个字符,完全不够使用嘛。这难不倒聪明的中国人民,他们粗暴的把128-255这段看不懂的奇异字符给删了,规定一个小于127的字符的意义与原来的(美国人发明)相同,但是2个大于127的字符连在一起(前面高字节,后面低字节)就表示一个汉字,这样就可以组合出7000多个简体汉字了,而且还把数学字符、希腊字母、日文假名都编了进去,甚至还把ASCII中0-127号已经有了的也重新编了一个2个字节的版本(0-127的叫半角字符,2个字节的叫全角字符)。这种方案被命名为“GB2312”,GB2312是对ASCII的中文扩展。

可是中国的汉字实在是太多了,很多人发现自己的名字在电脑中打不出来,于是,中国人干脆就规定,只要一个字节是大于127的,就表示这是一个汉字的开始,不在要求低字节也要大于127了。扩展之后的编码方式呗命名为“GBK”,GBK包括了GB2312的所有内容,同时又增加了20000个汉字(包括了繁体字)和字符。

再后来少数名族的同志也哟用电脑了,怎么办?继续扩展吧,有增加了几千个少数名族的汉字,这个编码被称为“GB18030”。从此中华名族优秀的文化就可以在电脑中传承了。

从GB2312-GBK-GB18030,最大的特点就是2个字节的汉字和1个字节的英文字符并存在一套编码里。那时的程序员必须小心翼翼的处理每个字节的值,以确定它表示的是英文还是汉字。

中国人这么聪明,其它国家也不差,他们都像中国一样搞出了一套自己的编码标准,结果就是谁也不认识谁。连台湾兄弟也发明了BIG5编码,同样说着中文的大陆和台湾,在电脑上却谁也不认识谁。

再后来一个ISO国际组织看不下去了,决定站出来解决这个问题。他们的方案是废除所有地区自己编的山寨编码,创建一个包含地球上所有文字、字符的编码,他们叫它“Unicode”。

Unicode的工作就是为字符配一个神奇的数字。

编码规则:将字符转换为字节序列的规则。

以上ASCII、GB2312、GBK、BIG5等都是字符集,对应的也是一种编码规则。而Unicode是一种字符集,它有很多编码规则:UTF-8、UTF-16等。

Unicode就像一个字符池,用一个非负整数唯一标记了每个字符。UTF8等编码方式就是用1-4个字节标识这个非负整数。

 

posted @ 2018-01-19 16:48 萨尔 阅读(117) 评论(0) 推荐(0) 编辑

2017年7月23日

泛型

摘要: 泛型的优点 1.性能 2.类型安全 泛型类List<T>中,泛型类型 T 定义了允许使用的类型。 3.二进制代码的重用 泛型类定义一次,可以使用不同的类型实例化。 4.代码的扩展 值类型使用泛型类,编译器会为每个值类型生成一个新类,因为值类型对内存大小的要求不同。 引用类型使用泛型类,共享一个本地类 阅读全文

posted @ 2017-07-23 15:47 萨尔 阅读(136) 评论(0) 推荐(0) 编辑

接口

摘要: /* 1.接口只能包含方法、属性、索引器、事件的声明。 2.接口方法的声明就像抽象方法一样,不提供实现。 3.接口不能实例化。 4.接口不能有构造函数。 5.接口不能有字段。 6.接口不能包含运算符重载。 7.接口不允许声明关于成员的修饰符,包括可访问性修饰符、抽象、虚拟等其它所有修饰符。 8.实现接口的类,必须给出所有接口成员的实现。 9.接口的实现中不能有静态的东西。 10.接口函数可以实现... 阅读全文

posted @ 2017-07-23 14:37 萨尔 阅读(128) 评论(0) 推荐(0) 编辑

隐藏方法不能实现多态性

摘要: /* 隐藏方法不能实现多态性 */ class Base{} class Derived : Base{} //baseObj.Func()方法调用的是基类版本 Base baseObj = new Derived(); baseObj.Func(); 阅读全文

posted @ 2017-07-23 03:55 萨尔 阅读(216) 评论(0) 推荐(0) 编辑

结构

摘要: 【结构】 1.结构和类的区别是它们在内存中的存储方式、访问方式(类是存储在堆上的引用类型,而结构是存储在栈上的值类型)和它们的一些特征(如结构不支持继承)。 2.结构和类在语法上的区别是,结构使用 struct 关键字替代 class 来声明结构。 3.结构总是继承于 System.ValueTyp 阅读全文

posted @ 2017-07-23 03:14 萨尔 阅读(118) 评论(0) 推荐(0) 编辑

静态

摘要: 静态类 静态类不能实例化 静态类不能包含实例成员 静态类不能有实例构造函数 静态类默认继承自System.Object根类,不能显式指定任何其他基类 静态类是密封的,不能被继承 静态函数 静态函数可以被重载 静态函数不能被重写,因为它们属于类,不属于任何实例,而虚函数的概念只对实例成员有意义 静态函 阅读全文

posted @ 2017-07-23 03:13 萨尔 阅读(151) 评论(0) 推荐(0) 编辑

2017年7月22日

虚方法、隐藏方法、抽象方法、密封方法、派生类中访问基类成员

摘要: 1.抽象类 1.抽象类不能实例化。 2.抽象类可以包含非抽象成员。 3.类中一旦包含了抽象成员,类就必须使用 abstract 关键字显示的声明为抽象类。 2.密封类 1.密封类不能被继承。 3.虚方法 1.把一个基类函数声明为 virtual ,就可以在任何派生类中重写该函数。 2.派生类在重写方 阅读全文

posted @ 2017-07-22 16:39 萨尔 阅读(194) 评论(0) 推荐(0) 编辑

类的修饰符

摘要: 静态类: 静态方法:属于类本身,不属于类的具体实例。可以被继承,适用于隐藏方法。 虚函数提供了方法的实现,并指示可以(不必须)在子类中重写。 虚函数的概念只针对类的实例成员函数有意义,静态函数不行。 抽象类:不能实例化 抽象函数:不提供函数的具体实现,必须在子类中重写。 抽象函数本身也是虚拟的,尽管 阅读全文

posted @ 2017-07-22 16:39 萨尔 阅读(274) 评论(0) 推荐(0) 编辑

扩展方法

摘要: 有许多扩展类的方法: 1.如果有类的源代码,继承就是给对象添加新功能的好方法。 2.如果没有类的源代码,可以使用扩展方法。 扩展方法: 1.扩展方法写着静态类中。 2.扩展方法也是静态的。但是调用时,和实例方法一样,使用对象调用。 3.如果扩展方法的名字和类中方法的签名相同,则优先类中原来的方法。 阅读全文

posted @ 2017-07-22 14:23 萨尔 阅读(132) 评论(0) 推荐(0) 编辑

2017年7月21日

类工厂模式(TDB)

摘要: rt 阅读全文

posted @ 2017-07-21 23:47 萨尔 阅读(140) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示