Skip to content

Latest commit

 

History

History
125 lines (89 loc) · 3.34 KB

5070-190458-000507 二进制文件流存取浮点数.sy.md

File metadata and controls

125 lines (89 loc) · 3.34 KB
show version enable_checker
step
1.0
true

文件流读写二进制浮点型

回忆

  • 上次在文件流中读写了二进制数字
  • 在多数字的读写实践中,确认
    • 二进制数字更有优势
  • 文件流中可以读写浮点型数字么?🤔

双精度浮点

  • 查看帮助

图片描述

  • 使用"d"模式
    • "d" 双精度

具体编码

  • 对2.375编码

图片描述

图片描述

  • 为什么呢?

存储顺序

图片描述

  • 他们两个
    • 一个是big-endian
    • 另一个是little-endian
  • 顺序不同
  • 什么意思呢?

顺序模式

  • big-endian和little-endian是两种字节存储机制
  • 描述在多字节数中各个字节的存储顺序
  • 这个词最早出现在《格利佛游记》
  • 该小说在描述Gulliver畅游小人国时碰到了
    • 对水煮蛋
    • 该从大的一端(Big-End)剥开
    • 还是小的一端(Little-End)剥开
    • 争论而引发了一场战争
  • 并形成了两支截然对立的队伍
    • 支持从大的一端剥开的人S就称作Big-Endians
    • 而支持从小的一端剥开的人就称作Little-Endians

图片描述

各自优势

图片描述

  • 小端模式
    • 强制转换数据不需要调整字节内容
    • 1、2、4字节整型的存储方式一样
  • 大端模式
    • 符号位的判定固定为第一个字节
    • 容易判断正负

具体架构

  • x86,MOS Technology 6502,Z80,VAX,PDP-11等处理器为Little endian
  • Motorola,PowerPC970,System/370,SPARC(除V9外)等处理器为Big endian
  • ARM, PowerPC (除PowerPC 970外), DEC Alpha, SPARC V9, MIPS, PA-RISC and IA64的字节序是可配置的

图片描述

  • 浮点数编码没有问题
  • 只要我们pack、unpack使用同样的模式就可以

写文件

图片描述

  • 写进去8个字节

验证

图片描述

  • 确实是8个字节
  • 确实是pack之后的二进制编码

读取

图片描述

  • 8字节读出来之后
  • 确实可以原样解回来
  • 下面我们来比较一下
  • 文本和二进制哪个更适合存储浮点

比较

  • 对于3.375这个数字
  • 大小
    • 字符串用5个字节
    • 浮点用8个字节
    • 不过选择单精度就是4个字节
  • 精度
    • 有效数字越多,字符串劣势越明显
    • 不论什么精度,浮点型数字大小是固定的
  • 转化
    • 字符串需要转化得到浮点数
    • 二进制读出来就是浮点数

总结

  • 这次在文件流中读写了二进制浮点
  • python文件流读写浮点数还是很方便的
  • 这就比他的前辈ABC语言强了好多
  • 为什么python对文件读写这么重视?🤔
  • 下次再说👋