Python_Cookbook_3rd_Edition 6.12 Вопрос - PullRequest
0 голосов
/ 15 февраля 2020

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)) в порядке

1 Ответ

0 голосов
/ 15 февраля 2020

В книге на рисунке справа перед кодом показано, как кодируются многоугольные записи. Первое поле - int, значение которого равно «Длина записи, включая длину (N байт)». Поскольку эта длина записи записывается как 4-байтовое i целое число, 4 добавляется к size всех точек (пар координат X, Y), составляющих многоугольник.

...