Skip to content

Latest commit

 

History

History
326 lines (224 loc) · 7.91 KB

294-192405-序列_字节流_bytes_字节序列_构造函数.sy.md

File metadata and controls

326 lines (224 loc) · 7.91 KB
show version enable_checker
step
1.0
true

字节流序列 - bytes

回忆

  • 上次复习了字符序列
    • 字符序列和列表、元组一样都属于序列
    • 序列的东西他全能用
      • in
      • 加法、乘法运算
      • 索引
      • 切片
      • index
      • len
      • max
      • min
  • 字符序列其实就是
    • 字符连成的序列
    • 一个个字符连起来成了串
    • 滔滔不绝、川流不息
    • 流动起来
  • 不过计算机中流动的并不是字符序列
    • 计算机只认识0、1构成的字节
    • 字节在流动
  • 字节怎么流的?
    • 可以流成字节序列吗?🤔

什么是序列

  • 序列序列
    • 有序的排列
  • 什么是有序?
    • 就是有序号
      • 正着数 0123
      • 倒着数-1-2-3
    • 一个个挨着
    • 排列着
  • 都有什么序列呢?
    1. 比较复杂的是列表 - 列表项可以不是同一个类型 - 而且可以嵌套
    2. 不可变的列表 - 就是元组
    3. 字符序列 - 就是字符串
  • 字节也可以形成序列吗?
  • 什么是字节?

字节

  • 首先明确字节长什么样子?

图片描述

  • 1 个 字节(byte)
    • 正好 8 个 位(bit)

图片描述

字节与字符

  • 可以使用hex函数
    • 得到数字对应的十六进制形态
  • 十六进制形态
    • 可以用来表示字节状态

图片描述

  • 字符存储在一个字节中
    • "a"的字节状态为61

编码和解码

  • 十六进制表示的字节(byte)
    • 可以被解码(decode)为一个字符(character)

图片描述

  • 一个字符(character)
    • 可以被编码(encode)为一个字节(byte)

图片描述

  • b"a"是什么类型呢?

字节

  • type(b"a")
    • 观察类型
  • 有好几个构造函数

图片描述

  • 先看看这个

构造函数

  • 构造n个字节的字节序列

图片描述

  • 其中每个字节都是null byte
    • 每个字节都是b"\x00"
  • 可以构造有内容的吗?

图片描述

字符串生成序列

图片描述

  • 可以将字符串和编码方式作为生成字节序列的参数
  • 这很像编码过程

字符串编码

  • 字符串和字节序列之间可以相互转化
    • 可以把字符编码为二进制字节序列
    • 也可以把二进制字节序列解码为字符串
  • 字符串是我们生活中常用的
    • 要把字符串 编码encode 为 二进制字节
    • 才能放进计算机

图片描述

  • 二进制字节序列是计算机存储中常用的
    • 要把 计算机中存储的二进制字节序列 解码decode 为 字符串
    • 才能在生活中理解

解码

  • 字符串是我们生活中常用的
    • 要把字符串 编码encode 为字节序列
    • 才能存储在计算机里面

图片描述

  • 字节序列是计算机存储中常用的
    • 要把计算机中存储的字节序列 解码decode 为字符串
    • 才能在生活中理解
  • 除了字符串需要编码解码之外
    • 数字也可以编码解码

数字编码解码

图片描述

  • 数字是我们生活中常用的

    • 要把数字 编码、装箱pack 为字节序列
    • 才能存储在计算机里面
  • 字节序列是计算机存储中常用的

    • 要把计算机中存储的字节序列 解码、拆箱unpack 为字符串
    • 才能在生活中理解
  • 数字可以按照他的类型

    • 来进行编码解码

图片描述

  • 我们选择"h"
    • 有符号
    • 两字节
  • 选择什么字节序呢?
    • 大端还是小端?

字节序

图片描述

  • 如何理解这个
    • b"\x04\xd2"?

字节大小

  • 1个字节8位
    • 前面的1个1
      • 合 2 8
    • 代表1个256

图片描述

  • 前面字节里面是4
    • 就是4 * (2 ** 8)

图片描述

  • 计算机中一切都是字节序列
    • 这如何理解?

第一台继电器计算机

  • 第一台计算机 由继电器作为元件
    • 艾肯 为 美国海军制作
    • 名叫 Harvard MARK I

图片描述

  • 也叫做ASCC
    • Automatic Sequence Controlled Calculator
    • 自动序列控制计算器

一切都是字节序列

  • 无论是程序
    • cpu 最终执行的二进制指令
  • 还是数据
    • 存储起来的数字、字符
  • 都是用字节存储着的

图片描述

  • 无论是计算设备
    • cpu
    • gpu
  • 还是存储设备
    • 内存硬盘
  • 甚至传输设备
    • 网卡、usb 口
  • 都是使用字节的
  • 可以用字节复制字节吗?

观察构造函数

图片描述

  • 试试

图片描述

  • 如何理解immutable copy呢?

观察

图片描述

  • 感觉这种构造函数好像没有构造一样
  • 只是加了个变量名而已吗?

应用是灵活的

图片描述

  • 这就用到了 字节序列的 加法
  • 加法是序列的通用操作
    • 是序列的通用操作
  • bytes还有一种构造函数应该如何理解?

图片描述

  • 可遍历的整数?

应用

图片描述

  • 元组、列表都是可遍历的类型

图片描述

  • bytes会把参数中的可遍历的整数都变成字节
  • 但是如果数字大于一个字节怎么办?

图片描述

空字节对象

  • 生成指定数量的空字节对象

图片描述

  • 参考红框所示

图片描述

  • 如果我就想按照绿框中的方式
    • 给一个超过0xff的数字呢?

超出范围

图片描述

  • 数字的接受范围是

    • range(0,256)
  • 可以将字节对象作为参数赋给元组吗?

    • 逆向操作

平行赋值

  • 还是经历了一个拆包(unpack)的过程

图片描述

  • 毕竟parallel assignment

图片描述

  • 两边断点数量要相等
  • 才可能平行

总结

  • 这次复习了字节序列
    • bytes
  • bytes
    • 有自己的构造函数
    • 也可以用字符串或者数字编码生成得到
  • 我们
    • 打开的图文
    • 听的音频
    • 看的视频
    • 传输的数据
    • 其实都是字节流
  • 输入流、输出流
    • 也是也都是字节流
  • 字节流就是字节序列
    • 序列的通用操作
      • 字节序列都能做吗?🤔
  • 下次再说 👋