PythoNN: Василий Рябов - "Парсинг бинарных данных с помощью ctypes, или пишем на питоне как на Си"

แชร์
ฝัง
  • เผยแพร่เมื่อ 21 ก.ค. 2023
  • Слайды: speakerdeck.com/sobolevn/pyth...
    Чат и анонсы: t.me/pytho_nn
  • เกม

ความคิดเห็น • 4

  • @Ca1vema
    @Ca1vema 10 หลายเดือนก่อน

    Как парсить данные переменной длины через структуры из ctypes?
    Кажется, что кроме как сделать шаг назад и переместиться в категорию "Как не надо делать! (а по рукам?)" выхода нет. Получается всё таки придётся делать так, как не надо.

    • @VasilyRyabovVarjag
      @VasilyRyabovVarjag 10 หลายเดือนก่อน

      Тот неловкий момент, когда комментарий сложнее доклада. 😅
      А если серьезно, то зависит от того, насколько переменные эти данные. В структуре можно сделать и union, который интерпретировать в зависимости от предыдущего поля. Или несколько структур завести: свою на каждый стабильного размера кусок данных.
      Но, в конце концов, если комфортнее делать как неправильно, то получить проклятие от потомков никто не может запретить. А если проект потом все равно умрет, то и совсем пофиг! 😅

    • @Ca1vema
      @Ca1vema 10 หลายเดือนก่อน +1

      @@VasilyRyabovVarjag В нашем случае у нас в пакетах что-то типо "в октете N длина поля, а дальше само поле" и "если здесь X, то длина поля 2 байта, если Y то один". Ну и всё в таком духе :))
      Извращаемся с struct`ом )

    • @VasilyRyabovVarjag
      @VasilyRyabovVarjag 10 หลายเดือนก่อน

      @@Ca1vema тут прямо visitor паттерном пахнет) В зависимости от типа поля разные методы звать. Так обычно синтаксическое дерево (AST) парсят (там тоже типы узлов разные). Но может и на вашу структуру пакетов такой подход ляжет вдруг. Кода мало не станет, но хотя бы стандартный подход какой-никакой.