zoukankan      html  css  js  c++  java
  • 字符编码

    字符编码

     

    人类采用十进制,数字是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://www.cnblogs.com/broadview/archive/2012/07/27/2611683.html

     

  • 相关阅读:
    head命令
    less命令
    解决get方法传递URL参数中文乱码问题
    The method convert(String) of type DateConverter must override a superclass method
    Tomcat Can't load AMD 64-bit .dll on a IA 32
    聚合函数查询 group by having
    string[] 清理重复+反转显示
    C# GetValueList 获得字符串中开始和结束字符串中间得值列表
    C# GetValue 正则获取开始结束代码
    string [] 去除重复字符两个方法
  • 原文地址:https://www.cnblogs.com/broadview/p/2620365.html
Copyright © 2011-2022 走看看