[oeasy]python0074[专业选修]字节序_byte_order_struct_pack_大端序_小端序

简介: [oeasy]python0074[专业选修]字节序_byte_order_struct_pack_大端序_小端序

进制转化

回忆上次内容

  • 上次 总结了
  • 计算字符串值的函数
  • eval


  • 四种进制的转化函数
  • bin
  • oct
  • int
  • hex



函数名

前缀

目标字符串所用进制

bin

0b

二进制

oct

0o

八进制

hex

0x

十六进制

eval

无前缀

十进制


添加图片注释,不超过 140 字(可选)


  • 数字41 和 字符串"41" 的不同
  • 字符串"41"
  • 两个字符
  • 字符存储依据是 ascii序号
  • b"\x34\x31"


  • 数字 41
  • 数字存储依据是 数字的二进制值
  • 转化为 二进制 0b101001
  • 字节前面补零
  • 得到 b"\x00\x29"


  • 这就两个字节




添加图片注释,不超过 140 字(可选)


  • 但是 这两个字节 在存储的时候
  • 有先后次序吗?🤔


存储

  • 258 这个数字
  • 如果用两个字节存储的话
  • 字节状态什么样子呢?



  • 字节状态会是
  • b"\x01\x02" 吗?



添加图片注释,不超过 140 字(可选)



观察网站



添加图片注释,不超过 140 字(可选)


  • 选择有符号双字节
  • signed short


选择结果

  • 网站中显示结果


添加图片注释,不超过 140 字(可选)


  • 可以使用python
  • 得到这两个字节的字节状态吗?


  • 借助一个包
  • struct


struct

  • 导入struct包,并查看手册
  • import struct
  • help(struct)



添加图片注释,不超过 140 字(可选)


  • 数据类型是 short
  • 对应 两个字节有符号的 整型数字
  • 对应的符号 是h


得到字节状态

  • 得到字节状态是b"\x02\x01"


添加图片注释,不超过 140 字(可选)


  • 不是应该对应着 b"\x01\x02"么?


添加图片注释,不超过 140 字(可选)


  • 这数字 可不能 读错写错啊?
  • 这该 如何理解 呢?

字节序

  • 这前后颠倒的问题
  • 涉及到 一个东西叫做
  • 字节序
  • byte order



添加图片注释,不超过 140 字(可选)


  • 这些可选的修饰字符
  • 暗示字节的次序


  • 字节次序有两种

符号

英文名称

中文名称

<

little-endian

小字节序

>

big-endian

大字节序


添加图片注释,不超过 140 字(可选)


  • 把这个修饰字节序的字符放在类型h(short)前面
  • <h : little-endian 2-byte
  • >h :  big-endian 2-byte


字节序对比

  • 下面两个不同的字节次序
  • 对应同一个数字
  • 0x12345678




添加图片注释,不超过 140 字(可选)


  • BigEndian
  • 从低地址开始
  • 在高地址结束
  • 也就是地址数值大的地方结束
  • 所以叫BigEndian


  • LittleEndian
  • 从高地址开始
  • 在低地址结束
  • 也就是地址数值小的地方结束
  • 所以叫LittleEndian


little-endian < h

  • <h 用的是小字节序
  • 编码模式属于 little-endian
  • 最低有效位(least significant byte)放在低地址 a



添加图片注释,不超过 140 字(可选)


  • 这是目前常用的指令集架构 ($x86、x86-64$) 用的字节序
  • CISC(复杂指令集)


  • 另一种字节序是大字节序
  • 应用于 RISC(精简指令集)


big-endian >h

  • h  是按下图中的字节排序
  • 编码模式属于 big-endian
  • 最低有效位(most significant byte)落在高地址



添加图片注释,不超过 140 字(可选)


  • 这是目前 RISC 指令集架构 (RISC、MIPS) 用的字节序
  • 也是我们看起来比较顺的字节序


  • 这两个单词怎么来的呢?
  • big-endian
  • little-endian


词汇来源

  • 主要指的是磕鸡蛋的时候用哪个头磕
  • 大头
  • 小头?



添加图片注释,不超过 140 字(可选)


  • 出现于《格列佛游记》
  • 小人国为水煮蛋争论
  • 争论的双方分别被称为“大端派”和“小端派”
  • 以下是1726年关于大小端之争历史的描述


“我下面要告诉你的是,Lilliput和Blefuscu这两大强国在过去36个月里一直在苦战。战争开始是由于以下的原因:我们大家都认为,吃鸡蛋前,原始的方法是打破鸡蛋较大的一端,可是当今皇帝的祖父小时候吃鸡蛋,一次按古法打鸡蛋时碰巧将一个手指弄破了。因此他的父亲,当时的皇帝,就下了一道敕令,命令全体臣民吃鸡蛋时打破鸡蛋较小的一端,违令者重罚。老百姓们对这项命令极其反感。历史告诉我们,由此曾经发生过6次叛乱,其中一个皇帝送了命,另一个丢了王位。这些叛乱大多都是由Blefuscu的国王大臣们煽动起来的。叛乱平息后,流亡的人总是逃到那个帝国去寻求避难。据估计,先后几次有11000人情愿受死也不肯去打破鸡蛋较小的一端。关于这一争端,曾出版过几百本大部著作,不过大端派的书一直是受禁的,法律也规定该派任何人不得做官。”

  • 这很像甜咸豆腐脑的争论
  • 无关对错
  • 只是个人习惯


  • 能两种都吃的话
  • 可以 增加食物多样性


  • 我个人郑重推荐
  • 加 韭菜花和辣椒油 少许


后续

  • 1980年
  • Danny Cohen
  • 一位网络协议的早期开发者


  • 在其著名的论文"On Holy Wars and a Plea for Peace"中
  • 为平息一场关于字节该以什么样的顺序传送的争论
  • 而第一次引用了该词



添加图片注释,不超过 140 字(可选)


  • python默认用的是
  • 什么字节序呢?


python默认字节序


添加图片注释,不超过 140 字(可选)


  • python默认用
  • 小端字节序



添加图片注释,不超过 140 字(可选)


生活细节

  • 除了磕鸡蛋之外
  • 鸡蛋放置也很有讲究



添加图片注释,不超过 140 字(可选)


  • 放置鸡蛋
  • 要按照鸡蛋 自身的规律


按规律办事

  • 大头里面 有空气
  • 大头朝上 放的时间久一点



添加图片注释,不超过 140 字(可选)


  • 磕鸡蛋的时候
  • 应该是磕哪头呢?


磕鸡蛋的细节

  • 鸡蛋有内膜 叫做凤凰衣
  • 可以外用
  • 也可以内用



添加图片注释,不超过 140 字(可选)


  • 粉碎性地磕鸡蛋外壳
  • 可以从小头附近 剥鸡蛋壳
  • 连同鸡蛋内膜一起剥出来



  • 手法要轻柔
  • 否则 鸡蛋壳会感觉到疼


寻道

  • 跳出大头小头二元对立


添加图片注释,不超过 140 字(可选)


  • 找到正确方法


添加图片注释,不超过 140 字(可选)


  • 完成任务

禅意

  • 不产生绝对判断
  • 不产生路径依赖


  • 不断研究感受
  • 找到最好的方法



添加图片注释,不超过 140 字(可选)


  • 随时接受教训
  • 灵活应变
  • 对自己的学习率敏感


总结

  • 这次我们研究了字节序
  • 字节序有两种


符号

英文名称

中文名称

<

little-endian

小字节序

>

big-endian

大字节序

  • 字节序 用来
  • 明确 整型数字存储的 顺序


  • 如果 读写数字出了错
  • 可以 考虑一下
  • 是否  字节序出了问题



  • 变量现在可以
  • 声明
  • 初始化
  • 存储了


  • 但是 变量
  • 又应该如何删除呢?🤔


相关文章
[oeasy]python062_在python中完成输入和输出_input_print
本文介绍了在Python中使用`input()`和`print()`函数完成输入和输出操作的基础知识。通过编写简单的程序,如问候用户和统计苹果数量,演示了如何添加提示信息、处理用户输入并输出结果。同时,回顾了上一次课程内容,包括`input`函数的参数和提示词的使用。文中还展示了如何在vim编辑器中编写和运行Python代码,并对vim和shell的基本操作进行了总结。最后提供了相关学习资源链接,方便读者进一步学习。
129 66
[oeasy]python065python报错怎么办_try_试着来_except_发现异常
本文介绍了Python中处理异常的基本方法,重点讲解了`try`和`except`的用法。通过一个计算苹果重量的小程序示例,展示了如何捕获用户输入错误并进行处理。主要内容包括: 1. **回顾上次内容**:简要回顾了Shell环境、Python3游乐场和Vim编辑器的使用。 2. **编写程序**:编写了一个简单的程序来计算苹果的总重量,但发现由于输入类型问题导致结果错误。 3. **调试与修正**:通过调试发现输入函数返回的是字符串类型,需要将其转换为整数类型才能正确计算。
52 32
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
27 8
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 &quot;hello world!&quot; 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
16 4
[oeasy]python066_如何捕获多个异常_try_否则_else_exception
本文介绍了Python中`try...except...else`结构的使用方法。主要内容包括: 1. **回顾上次内容**:简要复习了`try`和`except`的基本用法,强调了异常处理的重要性。 2. **详细解释**: - `try`块用于尝试执行代码,一旦发现错误会立即终止并跳转到`except`块。 - `except`块用于捕获特定类型的异常,并进行相应的处理。 - `else`块在没有异常时执行,是可选的。 3. **示例代码**:通过具体例子展示了如何捕获不同类型的异常(如`ValueError`和`ZeroDivisionError`),并解释了异常处理
45 24
[oeasy]python068_异常处理之后做些什么_try语句的完全体_最终_finally
介绍了 Python 中 `try` 语句的完全体,包括 `try`、`except`、`else` 和 `finally` 子句的使用。通过实例展示了如何捕获异常并输出详细的错误信息,如文件名和行号。特别强调了 `finally` 子句的作用,无论是否发生异常,`finally` 都会执行,常用于清理操作。最后总结了 `try` 语句的四个部分及其应用场景,并简要提及了 Python 社区的决策机制。 #try #except #else #finally
18 1
[oeasy]python064_命令行工作流的总结_vim_shell_python
本文总结了命令行工作流中的关键工具和操作,包括vim、shell和Python。主要内容如下: 1. **上次回顾**:完成了输入输出的代码编写,并再次练习了vim的使用。 2. **shell基础**:介绍了shell环境及其基本命令,如`pwd`、`cd`、`ll -l`等。 3. **Python游乐场**:通过`python3`命令进入Python交互环境,可以进行简单计算和函数调用,常用函数有`help`、`ord`、`chr`等。 4. **vim编辑器**:详细讲解了vim的三种模式(正常模式、插入模式、底行命令模式)及其切换方法,以及常用的底行命令如`:w`、`:q`、`
85 15
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
本文介绍了Python中`dir()`函数的使用方法及其作用。`dir()`可以列出当前作用域内的所有变量和成员,类似于`locals()`,但`dir()`不仅限于本地变量,还能显示模块中的所有成员。通过`dir(__builtins__)`可以查看内建模块中的所有内建函数,如`print`、`ord`、`chr`等。此外,还回顾了`try-except-finally`结构在数据库连接中的应用,并解释了为何`print`函数可以直接使用而无需导入,因为它位于`__builtins__`模块中。最后,简要提及了删除`__builtins__.print`的方法及其影响。
24 0
[oeasy]python059变量命名有什么规则_惯用法_蛇形命名法_name_convention_snake
本文探讨了Python中变量命名的几种常见方式,包括汉语拼音变量名、蛇形命名法(snake_case)和驼峰命名法(CamelCase)。回顾上次内容,我们主要讨论了使用下划线替代空格以提高代码可读性。实际编程中,当变量名由多个单词组成时,合理的命名惯例变得尤为重要。
122 9
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
25 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等