您查询的关键词是:ASCII字符编码 
下面是原始网址 http://book.51cto.com/art/201202/318141.htm 在 2019-08-27 17:03:51 的快照。

360搜索与该网页作者无关,不对其内容负责。

2.14.1 ASCII字符编码 - 51CTO.COM
|
|
51CTO旗下网站
|
|
移动端

2.14.1 ASCII字符编码

《汇编语言的编程艺术(第2版)》第2章数据表示,本章将讨论几个重要的概念,其中包括:二进制和十六进制数字系统;二进制数据的结构(位、半字节、字节、字以及双字);二进制的有符号和无符号数字系统;二进制值的算术、逻辑、移位以及循环移位运算;位域和压缩数据。本节为大家介绍ASCII字符编码

作者:马跃/包战 译来源:清华大学出版社|2012-02-17 14:12

2.14.1  ASCII字符编码

ASCII(American Standard Code for Information Interchange,美国信息交换标准码)字符集将128个文本字符映射为无符号整数值0~127($0~$7F)。当然,所有的对象在计算机内部都采用二进制数来表示,所以计算机用二进制数值来表示像字符这样的非数字实体就不值得惊讶了。虽然字符到数字的映射是任意的,并且不太重要,但是使用标准化的代码来表示这种映射是很重要的,因为需要与其他程序和外设进行通信,且需要与这些程序和设备使用相同的"语言"。这就该ASCII代码发挥作用了;它是一种已经达成一致的标准化代码。因此,如果用ASCII代码65来表示字符A,那么就会知道无论何时将这一数据传递给外设(如打印机),它们都会将该数值解释为字符A。

不应该认为计算机系统中只使用ASCII一种字符集。IBM在它的很多大型机系统中都使用EBCDIC字符集。另一种通用字符集是Unicode字符集。Unicode是对ASCII字符集的扩展,它采用16位而不是7位来表示字符。这就允许在字符集中使用65536个字符,将世界上不同语言的大部分符号包含到一种统一的字符集中。

因为ASCII字符集只提供了128个不同的字符,而一个字节可以表示256个不同的数值,这样就产生了一个很有趣的问题:"我们应该如何处理存储到一个字节中的数值128~255?"一种方法是忽略那些额外的数值。这是本书采用的最主要的方法。另一种可能性是扩展ASCII字符集,向字符集中加入128个字符。当然,这往往不能得到一种标准化的字符集,除非您能让所有人都赞成这种扩展。这是一项很困难的任务。

当IBM***生产出IBM-PC时,定义了这些额外的128个字符代码来保存各种非英文字母字符、由线画成的字符、数学符号以及其他几种特殊字符。因为IBM公司的PC是我们今天所说的一般PC的基础,所以它的字符集已经成为所有与IBM-PC兼容的机器的一种伪标准。甚至在现代的一些与IBM-PC不兼容且不能运行早期PC软件的机器上,IBM的扩展字符集仍然存在。但是,要注意该PC字符集(ASCII字符集的扩展)并不是通用的。当使用自带的字体时,大多数打印机都不会打印扩展字符,并且很多程序(尤其是在非英语的国家)都不在8位数值中使用扩展字符来表示额外的128个字符代码。正是因为这些原因,本书一般都坚持使用标准的128字符的ASCII字符集。

尽管事实上它是一个标准,但如果只是简单地使用标准的ASCII字符对数据进行编码,并不能保证各个系统间的兼容性。虽然大多数情况下,一台机器上的A很可能就是另一台机器上的A,但是关于控制字符的使用,不同机器之间的标准化非常少。事实上,32个控制代码加上DELETE,只有4个控制代码得到了普遍的支持--空格(BS)、制表符、回车符(CR)以及换行符(LF)。更糟糕的是,不同机器通常采用不同的方式来使用这些控制代码。行末是一个特别麻烦的例子。Windows、MS-DOS、CP/M以及其他系统采用两字符的序列CR/LF来对行末进行标记。Apple的Macintosh和很多其他系统只用一个CR字符来标记行末。Linux、Mac OS X、FreeBSD以及其他UNIX系统使用单个LF字符来对行末进行标记。无须多说,要在这些系统之间交换文件会遇到很多麻烦。即使这些系统上的所有文件采用的都是标准的ASCII字符,在它们之间交换文件时仍然需要对数据进行转换。幸运的是,这样的转换都十分简单。

尽管ASCII数据还存在一些主要的缺点,它仍然是计算机系统以及程序之间进行数据交换的标准。大多数程序都能够识别ASCII数据;同样,大多数程序都能够生成ASCII数据。因为要使用汇编语言来处理ASCII字符,所以需对字符集的编排进行研究,记住几个关键的ASCII代码(例如,0、A、a等)是比较明智的。

ASCII字符集被分成4组,每组由32个字符组成。前32个字符,即ASCII码0~$1F(31)构成了非打印字符(即控制字符)的特殊字符集。我们之所以把它们称为控制字符,是因为它们执行的是各种打印/显示的控制操作,而不是显示符号。这一类例子包括回车(将光标放到字符所在行的左边)11、换行(将光标移到输出设备的下一行)以及退格(将光标向左移动一个位置)。遗憾的是,不同的控制字符在不同的输出设备上执行不同的操作。在这些输出设备之间存在的统一标准很少。要想了解某个控制字符是如何影响某个特定设备的,需要参阅它的用户手册。

第2组的32个ASCII字符代码由各种标点符号、特殊字符以及数字组成。在该组中最值得注意的字符包括空格符(ASCII码为$20)和数字(ASCII码为$30~$39)。

第3组的32个字符包含所有的大写字母字符。字符A~Z的ASCII码位于$41~$***(65~90)之间。由于只有26个不同的字母字符,所以余下6个代码就用于表示特殊符号。

第4组,即***一组32个ASCII码表示小写字母字符、5个特殊符号以及一个控制符(DELETE)。注意,小写字母字符使用$61~$7A之间的ASCII码。如果将大写和小写字母字符转换成二进制,您就会注意到大写字母字符的ASCII码与它们所对应的小写字母恰好有一位不同。例如,考虑图2-26中给出的E和e的字符代码。

 
图2-26  E与e的ASCII码

这两个代码唯一不同的位置就是第5位。大写字母字符的第5位总是0;而小写字母字符的第5位总是1。这样就可以利用这一事实快速实现大小写之间的转换。如果有一个大写字母,可以通过把第5位设置为1将它强制转换为小写字符。如果有一个小写字母,并且想将它强制转换成大写形式,那么可以通过将第5位设置为0实现。因此,只需要通过转换第5位就可以实现字母字符的大小写转换了。

事实上,如表2-8所示,第5位和第6位就决定了字符处于4组ASCII字符集中的哪一组。

表2-8  ASCII组

6

5

0

0

控制字符

0

1

数字字符和标点符号

1

0

大写字符和特殊字符

1

1

小写字符和特殊字符

例如,可以通过把第5位和第6位都设置为0,将任一大写或者小写(或者相应的特殊)字符转换成等效的控制字符。

考虑表2-9中给出的数字字符的ASCII码。

表2-9  数字字符的ASCII码

   

   

0

48

$30

1

49

$31

2

50

$32

3

51

$33

4

52

$34

5

53

$35

6

54

$36

7

55

$37

8

56

$38

9

57

$39

这些ASCII码的十进制表示并没有很大的启发性。但是,这些ASCII码的十六进制表示却反映了一些非常重要的问题:ASCII码的低位半字节与它所表示的数字的二进制表示相同。只要把某个数字字符的高位半字节去掉(也就是说,设置为0),就可以将该字符代码转换为与其对应的二进制表示。相反,只要把高位半字节设置成3就可以将0~9内的某个二进制数值转换为它的ASCII码。注意,这里可以使用逻辑与操作将高位位强制设为0;同样,可以使用逻辑或操作将高位位强制设为%0011(3)。

注意,在数字字符串中,只去掉其中每一个数字的高位半字节不能将该数字串转换为它们等效的二进制表示。如果以这种方式来转换123($31 $32 $33)就可以得到三个字节:$010203;而123对应的正确的数值应该为$7B。如果要将数字串转换为整数就比这更加复杂了;上面所使用的转换方法只适用于单个的数字。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

276人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

643人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

游戏关卡设计

《半条命》作者倾心写就 暴雪总裁等业内专家强力推荐 盛大公司专业团队翻译 一起来创造引人入胜的游戏体验吧! 任何精彩游戏的核心部分...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客