LINUX.ORG.RU

Типы нестандартного размера в Kaitai Struct

 , , ,


0

2

Пытаюсь написать парсер для ar при помощи Kaitai Struct (cast GreyCat). Заголовок должен выглядеть следующим образом:

Offset 	Length 	Name 	 	 	 	Format
0 	16 	File identifier 	 	ASCII
16 	12 	File modification timestamp 	Decimal
28 	6 	Owner ID 	 	 	Decimal
34 	6 	Group ID 	 	 	Decimal
40 	8 	File mode 	 	 	Octal
48 	10 	File size in bytes 	 	Decimal
58 	2 	Ending characters 	 	0x60 0x0A
Там есть переменные типа decimal размером 6, 10 и 12 байт. Как их правильно обозначить в kaitai struct?
Пока мой ksy выглядит так:
meta:
  id: ar
  file-extension: a
seq:
  - id: sections
    type: section
types:
  section:
    seq:
      - id: artype
        type: str
        encoding: ascii
        terminator: 0x0a
      - id: arhead
        type: header
      - id: file
        size: arhead.filesize
  header:
    seq:
      - id: fileid
        type: str
        encoding: ascii
        size: 16
      - id: timestamp
        size: 12
      - id: owner
        size: 6
      - id: group
        size: 6
      - id: mode
        size: 8
      - id: filesize
        size: 10
      - id: ending
        contents: [0x60, 0x0a]

★★★★★

Прошу прощения за долгий ответ, сто лет сюда не заходил.

Судя по тому, что я вижу в примерах файлов — в реальности слова типа «decimal» обозначают именно что строковое представление числовых данных в виде десятичный цифр в кодировке ASCII. Соответственно, и прочитать их можно исключительно как:

- id: timestamp
  size: 12
  type: str
  encoding: ASCII # это можно в /meta перенести, т.к. тут явно везде одна и та же кодировка

Если дальше где-то нужно будет использовать это как именно числовые типы, то можно сделать timestamp.to_i (или mode.to_i(8) для восьмеричного представления).

GreyCat ★★ ()