现在的位置: 首页 > 综合 > 正文

字符编码

2013年08月17日 ⁄ 综合 ⁄ 共 1520字 ⁄ 字号 评论关闭

人类采用十进制,数字是0-9。计算机是二进制的世界,只有0 与1 两种选择,称为比特(bit)。

你可以想象一个灯泡就是一个比特,亮代表1,不亮代表0。

十进制的0
写成二进制是0,十进制的1 写成二进制是1,十进制的2 写成二进制是10,十

进制的3
写成二进制是11,十进制的4 写成二进制是100,十进制的256 写成二进制是

100000000。随着数值增大,二进制的长度增长得很快,十进制的256
只需要3 个数字,转成

二进制却需要9
个数字。二进制(比特)只适合计算机,不适合人类使用。

于是我们把四个比特结合在一起,姑且称为半字节,半字节能表示的数字范围提升到16。而

阿拉伯数字最高只能表达到9,至于10 ~ 15 分别用英文字符ABCDEF(不区分大小写)表示。

写代码或者写文章时,我们很少使用二进制,一般使用十进制或者十六进制。为了区分写出来

的数字是哪种进制,我们习惯在十六进制前面加上0x,而十进制数字前不加任何东西。例如:

0x20 相当于32

 

计算机把两个半字节结合在一起,称为字节(byte。一个字节有8
个比特,数字范围变成

0~255,也就是0x00~0xFF

英文字母大小写,加上10
个阿拉伯数字,共62 个,加上各种符号,就超出64(2 的6 次方)了。

所以最早我们用7
个比特(2 的7 次方)来表示字符(character,因此制订了一个标准,叫做ASCII。通常用一个字节来代表一个字符(不过这就浪费了一个比特)。

 

 

这就是完整的ASCII 字符编码表。绿色的部分是ASCII 的编码(这里用十六进制数字表示),

灰色与白色的部分是编码对应的字符,其中灰色的是不可显示字符,白色的是可显示字符。

只有可显示字符才能被打印出来。可显示字符的范围是在0x20 与0x7E 之间。注意,0x7F 是

不可显示字符。

 

那些不可显示的字符,我们看不到,那么又要如何输入呢?我们可以通过转义串(escape

sequence的方式使用它们,就像是一种代号。编码为0x00
的字符用^@ 表示,编码为0x01

的字符用^A(大小写皆可)表示等,如上表所示。

有些不可显示字符的转义串不止一种,例如编码为0x09
的字符就有三种表示法,可以是^I

^-^(TAB)(大小写皆可)。

不可显示字符中,目前最常用的是0x0A
与0x09。输入0x0A 有换行的效果,输入0x09 会跳到

下一个表格定位点(对交互环境来说,表格定位点就是8
的倍数位置)。

 

字符的表达方式是在字符(或者字符的转义串)本身前后加上英文双引号,然后再在这个整体

的前面加上#

打印可显示字符(例如#"a"),很简单地在界面上就出现该字符。如果打印不可显示字符,

又会如何?不同的不可显示字符有不同的效果,以0x07
字符来说,效果就是发出一声“哔”。

0x0A
字符来说,就是换行。

我们可以通过to-integer把字符转成整数,然后用to-hex
把整数转成看起来像十六进制

的值#0000000000000007,但我们希望只取得最后两个数字,所以通过修饰字/size 2

改变to-hex
的行为,使得to-hex
只保留最后两个数字。

 

让我们写一个稍微长一点的程序。这个程序文件名为dump.reb,它可以用来分析文件内容。把

文件内容输出到界面上,界面分成左右两部分,左边是文件内容的十六进制数据,右边则把数

据当成ASCII 呈现出来。右边遇到不可显示的字符(包括空格0x20)时就用一个点代替。

关于此代码的其他细节,在此不解释。

 

 

本文节选自《编程ING:人人都能学会程序设计》一书

蔡学镛 著

电子工业出版社出版

图书详细信息:http://blog.csdn.net/broadview2006/article/details/7768124

 

抱歉!评论已关闭.