博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字符编码
阅读量:7099 次
发布时间:2019-06-28

本文共 1544 字,大约阅读时间需要 5 分钟。

字符编码

 

人类采用十进制,数字是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 个,加上各种符号,就超出642 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://mlkhl.baihongyu.com/

你可能感兴趣的文章
HTML 中的 dl(dt,dd)、ul(li)、ol(li)
查看>>
Linux下Redis主从复制以及SSDB主主复制环境部署记录
查看>>
如何让win10实现关机确认-暂没确认
查看>>
李洪强漫谈iOS开发[C语言-036]-C语言前四天学习小结
查看>>
JQuery使用deferreds串行多个ajax请求
查看>>
常用js函数整理--common.js
查看>>
java内存泄漏与内存溢出
查看>>
分布式与集群
查看>>
互联网服务器的实现过程需要考虑哪些安全问题 & 加解密及哈希知识点
查看>>
LeetCode Add Two Numbers
查看>>
sql server2008给数据表,字段,添加修改注释
查看>>
meta标签清理缓存
查看>>
【数据结构】二叉树
查看>>
onvif开发之设备发现功能的实现--转
查看>>
虚拟机下linux迁移造成MAC地址异常处理办法
查看>>
数据库事务原子性、一致性是怎样实现的?[转]
查看>>
“营改增”后你该知道的…代开发票需要知道的16个事项
查看>>
arcgis10.1连接sqlserver数据库常见问题(转载)
查看>>
动态设置js的属性
查看>>
Fragment的setUserVisibleHint方法实现懒加载,但setUserVisibleHint 不起作用?
查看>>