|
15 | 15 | ``struct`` 模块可被用来编码/解码几乎所有类型的二进制的数据结构。为了解释清楚这种数据,假设你用下面的Python数据结构
|
16 | 16 | 来表示一个组成一系列多边形的点的集合:
|
17 | 17 |
|
18 |
| -.. code-block::python |
| 18 | +.. code-block:: python |
19 | 19 |
|
20 | 20 | polys = [
|
21 | 21 | [ (1.0, 2.5), (3.5, 4.0), (2.5, 1.5) ],
|
|
30 | 30 | +------+--------+------------------------------------+
|
31 | 31 | |Byte | Type | Description |
|
32 | 32 | +======+========+====================================+
|
33 |
| - |0 | int | File code (0x1234, little endian) | |
| 33 | + |0 | int | 文件代码(0x1234,小端) | |
34 | 34 | +------+--------+------------------------------------+
|
35 |
| - |4 | double | Minimum x (little endian) | |
| 35 | + |4 | double | x 的最小值(小端) | |
36 | 36 | +------+--------+------------------------------------+
|
37 |
| - |12 | double | Minimum y (little endian) | |
| 37 | + |12 | double | y 的最小值(小端) | |
38 | 38 | +------+--------+------------------------------------+
|
39 |
| - |20 | double | Maximum x (little endian) | |
| 39 | + |20 | double | x 的最大值(小端) | |
40 | 40 | +------+--------+------------------------------------+
|
41 |
| - |28 | double | Maximum y (little endian) | |
| 41 | + |28 | double | y 的最大值(小端) | |
42 | 42 | +------+--------+------------------------------------+
|
43 |
| - |36 | int | Number of polygons (little endian)| |
| 43 | + |36 | int | 三角形数量(小端) | |
44 | 44 | +------+--------+------------------------------------+
|
45 | 45 |
|
46 | 46 | 紧跟着头部是一系列的多边形记录,编码格式如下:
|
|
50 | 50 | +------+--------+-------------------------------------------+
|
51 | 51 | |Byte | Type | Description |
|
52 | 52 | +======+========+===========================================+
|
53 |
| - |0 | int | Record length including length (N bytes) | |
| 53 | + |0 | int | 记录长度(N字节) | |
54 | 54 | +------+--------+-------------------------------------------+
|
55 |
| - |4-N | Points | Pairs of (X,Y) coords as doubles | |
| 55 | + |4-N | Points | (X,Y) 坐标,以浮点数表示 | |
56 | 56 | +------+--------+-------------------------------------------+
|
57 | 57 |
|
58 | 58 | 为了写这样的文件,你可以使用如下的Python代码:
|
|
104 | 104 | 那未免也太繁杂了点。因此很显然应该有另一种解决方法可以简化这些步骤,让程序员只关注自最重要的事情。
|
105 | 105 |
|
106 | 106 | 在本小节接下来的部分,我会逐步演示一个更加优秀的解析字节数据的方案。
|
107 |
| -目标是可以给程序员提供一个高级的文件格式化方法,并简化读取和解包数据的细节。但是我要先提醒习啊你, |
| 107 | +目标是可以给程序员提供一个高级的文件格式化方法,并简化读取和解包数据的细节。但是我要先提醒你, |
108 | 108 | 本小节接下来的部分代码应该是整本书中最复杂最高级的例子,使用了大量的面向对象编程和元编程技术。
|
109 | 109 | 一定要仔细的阅读我们的讨论部分,另外也要参考下其他章节内容。
|
110 | 110 |
|
|
0 commit comments