show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次在文件流中读写了二进制数字
- 在多数字的读写实践中,确认
- 二进制数字更有优势
- 文件流中可以读写浮点型数字么?🤔
- 查看帮助
- 使用"d"模式
- "d" 双精度
- 对 2.375 编码
- 对数字编码并解码成功
- 但是他和http://www.binaryconvert.com/ 相比
- 结果并不一致
- 为什么呢?
- 这涉及到一个东西叫做编码次序
- 主要有两种
- 一个是 big-endian
- 另一个是 little-endian
- 顺序不同
- 什么意思呢?
- big-endian 和 little-endian 是两种字节存储机制
address | big-endian | little-endian |
---|---|---|
0x0000 | 0x12 | 0xcd |
0x0001 | 0x34 | 0xab |
0x0002 | 0xab | 0x34 |
0x0003 | 0xcd | 0x12 |
- 描述在多字节数中各个字节的存储顺序
- 这个词最早出现在《格利佛游记》
- 该小说在描述 Gulliver 畅游小人国时碰到了
- 对水煮蛋
- 该从大的一端(Big-End)剥开
- 还是小的一端(Little-End)剥开
- 争论而引发了一场战争
- 并形成了两支截然对立的队伍
- 支持从大的一端剥开的人就称作 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 的字节序是可配置的
- riscv 是小端顺序
- 浮点数编码没有问题
- 只要我们 pack、unpack 使用同样的模式就可以
- 写进去 8 个字节
- 确实是 8 个字节
- 确实是 pack 之后的二进制编码
- 8 字节读出来之后
- 确实可以原样解回来
- 下面我们来比较一下
- 文本和二进制哪个更适合存储浮点
- 对于 3.375 这个数字
- 大小
- 字符串
- 用 5 个字节
- 浮点型
- 用 8 个字节
- 不过选择单精度浮点型就是 4 个字节
- 字符串
- 精度
- 字符串
- 有效数字越多
- 字符串越长
- 所占字节数越多
- 劣势越明显
- 浮点型
- 大小是固定的
- 所占字节数固定
- 字符串
- 转化
- 字符串
- 需要转化变回到浮点数
- 二进制
- 读出来就是浮点数
- 可以直接计算
- 字符串
- 这就是二进制浮点型两种编码方式的优缺点
- 浮点型的编解码和整型类似
- pack、encode 都是编码
- 都是把现实世界的数字和文字转化为二进制
- unpack、decode 都是解码
- 都是把二进制转化为现实世界的数字和文字
- 这次在文件流中读写了二进制浮点
- python 文件流读写浮点数还是很方便的
- 这就比他的前辈 ABC 语言强了好多
- 为什么 python 对文件读写这么重视?🤔
- 下次再说 👋