[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

大字节序

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


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



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


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


目录
相关文章
|
7天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
98 80
|
14天前
|
人工智能 C语言 Python
[oeasy]python051_什么样的变量名能用_标识符_identifier
本文介绍了Python中变量名的命名规则,强调标识符(identifier)必须以字母或下划线开始,后续可包含字母、下划线及数字。通过`isidentifier()`函数可验证字符串是否为合法标识符。文中还探讨了为何数字不能作为标识符的开头,并提供了相关练习与解答,最后提及这些规则源自C语言的影响。
107 69
|
16天前
|
Python
[oeasy]python050_如何删除变量_del_delete_variable
本文介绍了Python中如何删除变量,通过`del`关键字实现。首先回顾了变量的声明与赋值,说明变量在声明前是不存在的,通过声明赋予其生命和初始值。使用`locals()`函数可查看当前作用域内的所有本地变量。进一步探讨了变量的生命周期,包括自然死亡(程序结束时自动释放)和手动删除(使用`del`关键字)。最后指出,删除后的变量将无法在当前作用域中被访问,并提供了相关示例代码及图像辅助理解。
108 68
|
5天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
24 9
|
12天前
|
Unix 编译器 C语言
[oeasy]python052_[系统开发语言为什么默认是c语言
本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
22 5
|
17天前
|
Shell Python
[oeasy]python049_[词根溯源]locals_现在都定义了哪些变量
本文介绍了Python中`locals()`函数的使用方法及其在调试中的作用。通过回顾变量赋值、连等赋值、解包赋值等内容,文章详细解释了如何利用`locals()`函数查看当前作用域内的本地变量,并探讨了变量声明前后以及导入模块对本地变量的影响。最后,文章还涉及了一些与“local”相关的英语词汇,如`locate`、`allocate`等,帮助读者更好地理解“本地”概念在编程及日常生活中的应用。
28 9
|
21天前
|
Python 容器
[oeasy]python048_用变量赋值_连等赋值_解包赋值_unpack_assignment _
本文介绍了Python中变量赋值的不同方式,包括使用字面量和另一个变量进行赋值。通过`id()`函数展示了变量在内存中的唯一地址,并探讨了变量、模块、函数及类类型的地址特性。文章还讲解了连等赋值和解包赋值的概念,以及如何查看已声明的变量。最后总结了所有对象(如变量、模块、函数、类)都有其类型且在内存中有唯一的引用地址,构成了Python系统的基石。
28 5
|
28天前
|
存储 Python 容器
[oeasy]python045_[词根溯源]赋值_assignment_usage_使用
本文回顾了上一次讲解的内容,重点讨论了变量的概念及其在各种系统和游戏中的应用。文章详细解释了变量的声明与赋值操作,强调了赋值即为将具体值存储到变量名下的过程。同时,通过例子说明了字面量(如数字0)不能被赋值给其他值的原因。此外,还探讨了“赋值”一词的来源及其英文表达“assignment”的含义,并简要介绍了与之相关的英语词汇,如sign、assign、signal等。最后,总结了本次课程的核心内容,即赋值操作的定义和实现方式。
24 3
|
1月前
|
开发工具 Python
[oeasy]python043_自己制作的ascii码表_循环语句_条件语句_缩进_indent
本文介绍了如何使用Python制作ASCII码表,回顾了上一次课程中`print`函数的`end`参数,并通过循环和条件语句实现每8个字符换行的功能。通过调整代码中的缩进,实现了正确的输出格式。最后展示了制作完成的ASCII码表,并预告了下一次课程的内容。
27 2
|
1月前
|
人工智能 Shell 开发工具
[oeasy]python0041_输出ASCII码表_英文字符编码_键盘字符_ISO_646
本文介绍了ASCII码表的生成与使用,包括英文字符、数字和符号的编码。通过Python代码遍历0到127的ASCII值,解决了找不到竖线符号的问题,并解释了ASCII码的固定映射关系及其重要性。文章还介绍了ASCII码的历史背景,以及它如何成为国际标准ISO 646。最后,通过安装`ascii`程序展示了完整的ASCII码表。
24 1