Kdyby čistě náhodou byly nějaké hodnoty little endian a jiné big endian, tak to v jednou "unpacku" udělat nepůjde že? Muselo by se rozdělit na dvě části?
Jinak jsem na základě článku hledal něco podobného pro Go a kupodivu nic moc neexistuje. Dva podobné balíčky, ale moc toho neumí.
Ano, jedním formátovacím řetězcem to popsat nejde, musí se to rozdělit. Ale zase v praxi to asi moc často nenastane.
Re Go: hmm námět na projekt nebo na vylepšení toho co existuje. Podívám se :-)
Nestačilo by standardní encoding/binary? (https://pkg.go.dev/encoding/binary)
Nebo to je jeden z těch, co toho moc neumí.? :) Kromě automatického zarovnání podle platformy tam imho nic nechybí.
Nejprve poděkování autorovi za článek (a nejen tento) a malá poznámka. Pokud máte v úmyslu používat "struct" pro dekódování binárních formátů, pak zvažte použití "netstruct".
Ve "struct" totiž reálně chybí (a nejspíše bude i vždy chybět - viz https://bugs.python.org/issue29328) podpora pro řetězce "proměnné" délky (ve smyslu "flexible array member") .
Místo struct.Struct("b").unpack(bytes) lze použít struct.unpack("b", bytes). Ale lepší je použít struct.unpack_from kterému lze dát offset od kterého číst data. Lze se tak vyhnout zbytečnému kopírování částí vstupního souboru. Také neháže výjimku pokud nejsou zkonzumovány všechny vstupní bajty.
Velmi dobré balíčky pro čtení binárních dat jsou https://construct.readthedocs.io a https://kaitai.io/.
5. 1. 2025, 13:13 editováno autorem komentáře