Chinaunix首页 | 论坛 | 博客
  • 博客访问: 183877
  • 博文数量: 219
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2221
  • 用 户 组: 普通用户
  • 注册时间: 2020-08-10 06:35
文章分类
文章存档

2024年(4)

2023年(86)

2022年(53)

2021年(42)

2020年(34)

我的朋友

分类: Python/Ruby

2022-11-11 15:45:52

ASCII 码表

回忆上次内容

  • ord(c)和chr(i)
  • 这是俩函数
  • 这俩函数是一对,相反相成的??
  • ord 通过 字符 找到对应的 数字
  • chr 通过 数字 找到对应的 字符
  • 字符 的本质是 数字
  • 字符都对应着一些数字
  • a 对应 97
  • b 对应 98
  • c 对应 99
  • 都连号好像应该是天经地义的?
  • 为什么小写a从97开始?
  • 但除了小写字母之外还有很多字符
  • 他们都是如何分布的呢?????

小写字母

#输出a,b,c
ord("a")
ord("b")
ord("c")
#输出a的相对序号
ord("a")-ord("a")
#输出z-a的数字差距,相对序号
ord("z")-ord("a")
  • a、b、c 这些字符是挨着的
  • 正好从0到25,总共26个????
  • 对应数字也是挨着的

编辑

编码规律

  • 从 a-z 应该都是挨着的
  • 26 个英文字母
  • 为什么是从 97 开始?
  • 应该还有别的字符
  • 低头看一下键盘

编辑
  • 除了小写字母之外
  • 大写字母
  • 数字
  • 符号
  • 大概有多少个字符呢?

字符全排列

  • 每一个字符都会对应一个序号
  • 序号用二进制的方式存在字节(byte)中
  • 一个字节(byte)总有8位(bit)
  • 每一位(bit)是一个二进制(binary)数字(digit)

编辑
  • 从 8个0 到 8个1 相当于
  • 从 0 到 255

编辑
  • 我想要
  • 把所有可能的序号对应的字符都数一遍
  • 可行么?

遍历范围

for i in range(2 ** 8):
    print(i,end=",")
  • 遍历范围是[0, 28)
  • 也就是[0, 256)
  • 前闭后开
  • 不包含256

编辑
  • 我们先把 从0到255 挨排儿捋一遍

编辑
  • 如何通过序号找到对应的字符呢?

对应的字符

  • 通过数字找到对应的字符是chr
for n in range(255):
    print(chr(n),end="")
    if n % 16 == 0:
        print()
  • print(chr(n),end="")
  • chr(n)
  • 输出n的字符状态
  • end=""
  • 结束时什么也不输出
  • 不输出默认的换行
  • if n % 16 == 0:
  • print()
  • 如果n能被16整除
  • 那么输出换行

编辑
  • 结果如何呢?

结果

编辑
  • 字母和数字还是挺完整的
  • 这套对应关系有没有个名字呢?

ASCII 码表

  • 当时美国的工程师定义了一套编码规则
  • ASCII
  • American Standard Code for Information Interchange
  • 美国信息交换标准代码

编辑
  • 这建立起了 字符 和 二进制01 的 映射关系
  • 字符 和 二进制数 的 映射关系 如果不一致
  • 面对同一个二进制数 01010101
  • 就会映射到不同的字符
  • 人们看到不同的字符就认为是乱码
  • 这套ascii标准在各种计算机系统中需要统一
  • 否则无法通信
  • 这个 ASCII 什么时候开始有的呢?

初现

  • 1967 年的时候就有了{BANNED}最佳初这个 ASCII 码表????
  • 当时计算机
  • 低电平表示 0
  • 高电平表示 1
  • 电子计算机中所有的数据都是 0 和 1

编辑
  • 先是由美国国家标准学会制定
  • (American National Standard Institute , ANSI )
  • {BANNED}最佳初是美国的国家标准
  • 被称作美国信息交换标准代码
  • 美国之外的国家如何编码基本字符呢?

国际化

  • 后来是国际标准化组织定为国际标准ISO
  • International Organization for Standardization a.k.a. ISO
  • 称为 ISO 646 标准

编辑
  • {BANNED}最佳后一次更新则是在 1986 年
  • 到目前为止共定义了 128 个字符
  • 能否完整系统地看到整个ascii码表的对应关系呢?

ascii

  • 我们先来下个ascii程序
sudo apt install ascii
  • 上面的命令可以安装ascii这个应用

编辑

使用ascii

  • 每一字符有三个部分组成
  • Dec 对应的是 10 进制数
  • Hex 对应的是 16 进制数
  • {BANNED}最佳后一列 对应的是 具体字符或功能

编辑
  • 字符包括
  • 控制
  • 符号
  • 英文大写字母
  • 英文小写字母
  • 这样就把各种字符和一个二进制数字对应起来了

解码 ASCII

  • 我们找到小写的a
  • 这个小写的 a 在电脑中存储的时候
  • 对应着一个字节
  • 8位2进制数
  • 也就是8位(0或者1)
  • 到底是多少呢?
  • 先沿着下图中1的方向
  • 向上找到110
  • 这是他的高三位
  • 765位

编辑
  • 再沿着2的方向
  • 向左找到0001
  • 这是他的低四位
  • 4321位
  • 在前面加一个0
  • 得到(01100001)2进制

总结

  • 这次我们了解了ASCII码表
  • ASCII 码表就是
  • American Standard Code for Information Interchange
  • 美国信息交换标准代码
  • ASCII 码表范围
  • 0x30-0x39 这个范围是 数字
  • 数字的编码减去 0x30 正好得到数字本身
  • 0x41-0x5A 这个范围是 大 写字母
  • 0x61-0x7A 这个范围是 小 写字母
  • 0x20-0x7F 之间各处零散排布着各种符号

编辑
阅读(656) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~