Python_Cookbook_3rd_Edition 6.12一个问题

问题描述 投票:-1回答:1

Python_Cookbook_3rd_Edition

6.12。读取嵌套和可变大小的二进制文件结构

import struct
import itertools

def write_polys(filename, polys):
    # Determine bounding box
    flattened = list(itertools.chain(*polys))
    min_x = min(x for x, y in flattened)
    max_x = max(x for x, y in flattened)
    min_y = min(y for x, y in flattened)
    max_y = max(y for x, y in flattened)
    with open(filename, 'wb') as f:
        f.write(struct.pack('<iddddi', 0x1234,
                            min_x, min_y,
                            max_x, max_y,
                            len(polys)))
        for poly in polys:
            size = len(poly) * struct.calcsize('<dd')
            f.write(struct.pack('<i', size + 4))
            for pt in poly:
                f.write(struct.pack('<dd', *pt))

为什么使用f.write(struct.pack('<i', size + 4)) size+4

我认为f.write(struct.pack('<i', size))还可以

python python-3.x cookbook
1个回答
0
投票

在代码正上方的书中,它显示了多边形记录的编码方式。第一个字段是int,其值为“记录长度,包括长度(N个字节)”。由于此记录长度写为4字节i整数,因此4被添加到构成多边形的所有点(X,Y坐标对)的size上。

© www.soinside.com 2019 - 2024. All rights reserved.