Skip to content

Latest commit

 

History

History
353 lines (248 loc) · 7.69 KB

023-814924-字节形态_hex函数_安徒生童话_byte.sy.md

File metadata and controls

353 lines (248 loc) · 7.69 KB
show version enable_checker
step
1.0
true

文件的字节形态

回忆上次内容

  • 上次找到了
    • 字符 和 字节状态 之间的
      • 映射 对应关系
    • 字符 对应着 字节
    • 字节 也对应着 字符
  • 这种字节状态 是用
    • 2位16进制数 来表示的
  • hex(n)可以把数字转化为
    • 16进制字符串形式
      • 对应单词 hexadecimal
  • bin(n)可以把数字转化为
    • 2进制字符串形式
      • 对应单词 binary
  • 根据ascii中的 字符序号
    • 能够 把字符存储进 计算机的字节 了

图片描述

  • 这十进制、二进制、十六进制
    • 转来转去的有什么意义吗?
  • 可以
    • 可以看得见摸得着吗?

查看状态

  • 键入 vi ascii.txt
    • 使用vi 编辑ascii.txt
  • 按下i
    • 进入插入模式
  • 插入模式下
    • 写下abcd四个字母
  • 按下esc
    • 退回到正常状态

图片描述

  • 键入 :wq
    • 保存 并 退出

查看文件

  • 退回到shell之后
ls -l ascii.txt
  • ls -l ascii.txt
    • 可以 查看 ascii.txt的详细信息
    • 注意命令中的空格

图片描述

  • 将终端窗口向右侧移动

图片描述

  • 点击桌面的Home图标
    • 启动文件管理器

文件管理器

  • 可以 打开ascii.txt观察文件内容
  • 还可以 右键ascii.txt查看文件大小

图片描述

  • ascii.txt 明明只有四个字符
    • 为什么会有五个字节呢?

转储为字节形态

  • 重新用 vi 编辑ascii.txt
vi ascii.txt
  • 键入 :%!xxd
    • 将文件 转储为 字节形态

图片描述

  • 可以 看到
    • abcd 是以 16进制形式
      • 存储在字节中的

图片描述

  • 第一个字节
    • 0x61 - a
  • 第二个字节
    • 0x62 - b
  • 第三个字节
    • 0x63 - c
  • 第四个字节
    • 0x64 - d
  • 最后 还加了个字节
    • 0x0a
  • 总共5个字节

对应关系

  • 这种字节状态
    • 是用 2位16进制数 来表示的
  • hex(n)可以把数字 转化为 16进制字符串形态
    • 对应单词为 hexadecimal

图片描述

  • 可以看看
    • hello.py文件
      • 是如何存储的吗?

py文件

  • 再写经典

    • vi oeasy.py
  • i进入插入模式

    • 写下代码
  • 按下esc

    • 退回到正常状态

图片描述

  • 这段 特别熟
    • 仿佛写过 2万多遍
  • :wq
    • 保存并退出

查看文件

  • 回到shell后
ls -l oeasy.py
  • ls -l oeasy.py
    • 使用 ls -l 命令
      • 查看oeasy.py文件的详细信息

图片描述

  • oeasy.py
    • 真的是 30个字节 吗?
  • 可以看看
    • py文件的字节状态 吗?
  • 这30个字节
    • 长什么样子呢?

字节状态

  • vi oeasy.py
    • 编辑 oeasy.py 文件
  • 键入 :%!xxd
    • 将文件 转化为 字节形态

图片描述

  • 虽然只有两行
    • 不过 也能看到
      • 字符和字节间的映射关系

图片描述

  • 一行有16个字符
  • 差2个字节
    • 到达两行
    • 也就是达到32个字节
  • 32个字节 刚好是
    • (20)16进制
  • 如果 达到32个字节的话
    • 正好是两行
  • 再去看看稍微大一点的东西

安徒生童话

git clone https://github.com/overmind1980/oeasy-python-tutorial.git
  • 下载之后
    • 按下图 提示进入相应目录
cd oeasy-python-tutorial/samples/000016
  • 用ll命令 列出
    • 当前文件夹下所有文件的详细信息
ll

图片描述

  • 如果github无法下载的话
    • 怎么办呢?

百度网盘下载

图片描述

上传到云

图片描述

  • 然后可以在~/Code文件夹下找到

图片描述

在终端中观察

  • 这个小说总共318KByte
    • 每个Byte 对应一个 字符
      • 整个小说 共 31w+ 个英文字符

图片描述

  • 打开这个小说对应的文本文件
vi anderson_fairy_tales.txt
  • 打开之后 什么样 呢?

打开文本文档

  • 这文档 就是 纯文本的

图片描述

  • 如何 转化为 字节形态呢?

xxd

  • xxd 可以查看 文件的二进制形态
    • dump的本意是 倾倒垃圾
    • 这里 指的是 转储

图片描述

  • 把文件转储为
    • 16进制 字节形态

在vim中

  • 转化为字节模式
    • :%!xxd

图片描述

  • :%!xxd –r 可以还原回到纯文本状态 😉
    • :%!xxd 转成字节形态
    • :%!xxd –r 转回文本形态
  • 反复横跳...
  • 可以 感受txt文本
    • 总共 318K个字符
    • 甚至能知道 每个字节的状态
  • 2 位 十六进制(hexadecimal)数
    • 刚好很适合 输出字节状态
  • 为什么hex 对应着16进制 呢?

hexa-decimal

  • hexa - 对应着六
    • 其实就是
      • 希腊语 六的发音
        • 落实到 英文字母的状态

图片描述

词根

  • 不同的语族
    • 有不同领域擅长的方面
      • 最终融汇到 英语词典

图片描述

  • hexa 我们理解了
    • hexa 对应着 six
  • 那么decimal 是什么意思来着?

decimal

图片描述

  • decimal 就是 ten
    • hex-decimal 就是 six-teen
  • 落实到函数 就是hex()
  • 怎么用 呢?

转化回 十进制

图片描述

  • 和二进制 是相同的

图片描述

  • 二进制是0b开头
    • 0 代表数字
    • b 代表二进制(binary)
  • 十六进制是0x开头
    • 0 代表数字
    • x 代表十六进制(hexadecimal)

总结

  • 这次从易到难编辑了三个文件

    • abcd
    • oeasy.py
    • 安徒生童话
  • 找到了 字符和字节状态之间的

    • 映射对应关系
      • 字符 对应着 字节
      • 字节 也对应着 字符
  • 能够 把字符存储进

    • 计算机的字节中了

图片描述

  • 终于知道
    • 字符对应的字节
      • 到底长啥样 了
  • 关于vim也得到了很好的锻炼
    • 我们对于vim和shell要好好总结一下
      • 以后就不会 总提示得这么详细了
  • 我们下次再说!👋