Skip to content

Latest commit

 

History

History
281 lines (208 loc) · 6.41 KB

286-896408-黑暗森林显形_7bit电传打字机_ASCII中的隐藏字符.sy.md

File metadata and controls

281 lines (208 loc) · 6.41 KB
show version enable_checker
step
1.0
true

换行字符

回忆上次内容

  • 上次比较好玩
    • 使用了随机这个包
    • 然后造成了满屏各种各样好玩的东西刷屏
  • 字符
    • 在计算机当中
      • 是用二进制形式存储的
  • 每个字符
    • 都有自己的字符序号
    • 字符序号 是一个数字
  • 最早 将字符电子化的 是电报
    • 电报时代对于英文、数字的编码
    • 用的是摩斯电码

图片描述

  • 摩斯电码靠的是
    • 长、短、断
    • 26个字符不连续
    • 这是个字符电子化的产物
  • 摩斯电码 将字符 电子化
    • 后来是 怎么完成 数字化 的呢?🤔

回溯 ASCII 码

  • 电报传过来
    • 需要 快速解码并记录
    • 于是有了
      • 电传打字机(tele-typewriter)
  • 电传打字机
    • 需要 统一编码的 字母和数字
  • ASCII最早是
    • 7-bit电传打字机(tele-typewriter)的
      • 存储代码
  • 当时 7个打孔位置
    • 今天变成了
      • 7-bit

图片描述

  • 要把 滴、答、停的 电报信号
    • 变成 0和1的 二进制信号

ASCII的演化(evolve)

  • 贝尔公司 控制着 电报行业
    • 电报行业 要用 打字机 发送和接受 电报信号
      • 主要设备 就是 电传打字机
  • 贝尔公司 提出草案
    • 试图 建立电传打字机的标准
      • 筹备 标准化协会

图片描述

  • 1960年10月6日
    • 美国标准协会(ASA)X3 召开首次会议
      • ASCII标准 开始了进化
  • 美国标准协会(ASA)
    • 进化为
      • 美国国家标准协会
        • (American National Standards Institute)
        • 简称ANSI
    • 帮助ASCII
      • 继续演化

编码来源

  • (ASA X3.4-1963) 第一次明确
    • 大小写字母之间
      • 只差个二进制位

图片描述

  • 这很重要
    • 因为
      • 上游 影响 下游

错误编码

  • 错误编码 一旦 成为标准
    • 所有 应用了错误编码的 文档
      • 废掉了
  • 就像当年
    • IBM 的 EBCDIC

图片描述

  • EBCDIC编码的问题
    • 是 字母不连续
      • i、j之间 不直接相连
    • 判断字符 是否是 小写字母
      • 需要做六次判断
    • 导致 EBCDIC最终
      • 被ascii所淘汰

历史

  • IBM 使用的编码EBCDIC 编码
    • 就是由于有致命缺陷被废弃了
  • IBM的卡片
    • 需要专门的解码方式
      • 才能被还原

图片描述

  • ASCII 开始演化为
    • 字符数字化的主要编码
  • ASCII 中的
    • 字符和序号
      • 是如何对应的呢?

chr

  • 先看看"oeasy"这个字符串

    • 是如何存在的🤔
  • 字符都对应着一个数字序号

    • 这个数字序号 在计算机上
      • 究竟是 如何存储 的呢?

图片描述

  • 用 二进制形式
    • 存储在 字节
  • 可以看看这个二进制形式么?

bin

  • 8-bit 构成 byte

图片描述

  • 上图的字节为
    • (0011 0101)2进制
    • (35)16进制
    • 对应着字符数字'5'

图片描述

  • 我想把序号 从0到127 的 ASCII字符
    • 全都打出来
      • 可以么?

回忆show.py

  • 回忆编写show.py
    • 注意缩进位置
    • 注意 ., 的区别
for n in range(128):
    print(chr(n),end="")
    if n % 16 == 0:
        print()
  • esc
    • :w|!python3 %
      • 保存并用python3运行

运行结果

  • 确实可以输出出来

图片描述

  • 这输出 靠的是
    • 把序号转化成字符的 函数
      • chr
  • 但 没有看到数字0?
    • 理论上 0在1之前
      • 仿佛 已经被黑暗森林 所吞没

解码

  • 在原来的基础上修改代码
    • 如下所示
for n in range(128):
    print(chr(n).encode(),end="")
    if n % 8 == 7:
        print()
  • 运行结果

图片描述

  • 0和前面的字节都现了原形
    • 红底部分出现了
      • 黑暗森林仿佛看得见了
  • 0a 对应的字节状态是
    • b"\n"
  • b"\n" 是什么呢?

使用函数ord

  • 将目前的终端往右移动

    • 重新开启一个终端
      • 键入python3 进入游乐场
  • 使用ord 得到\n 的序号

图片描述

  • 字符'\n'对应
    • 序号为 10
    • 字节状态 为b"\x0a"
  • \n字符 好像
    • 在 哪里 见过?🤔

回到最初

  • 想要了解 这个'\n'
    • 还得 回到最初
  • 回到 开始的时候

图片描述

  • 前面介绍过
    • c语言 最初的 "hello world"
  • 注意到 hello world后面的\n了 吗?

\n

  • 特别注意 斜杠的方向
    • 左上到右下\ 叫 反斜杠
      • 键盘位置 在回车键附近

图片描述

  • \n到底 是什么??🤔

输出"\n"

  • \n 是一个整体
    • 个字节
      • 个字符
  • 序号是(10)10进制
    • 也就是(0x0a)16进制
    • 位于abcd后面的字符的第5个字符
    • 作为文档结束的字符
  • \n 在vim显示的字节状态中
    • 显示为 一个.

图片描述

  • 换行符 序号是10
    • 位于 黑暗森林深处

图片描述

  • 这个换行符\n怎么用呢

总结

  • 电报信号 本来是 滴答空
    • 开始 用电传打字机
      • 控制 电报信号收发
  • 电传打字机数据 可以存储于纸带上
    • 每行 有7个 输入位
      • 总共 可以表示128个字符

图片描述

  • 这就是 ASCII的由来
    • 有些字符 我们是能看到的
    • 还有些字符 我们看不到
    • 比如换行符\n
  • 可以输出这个换行符\n吗?🤔
  • 我们下次再说!👋