Vlákno názorů k článku Manipulace s binárními datovými strukturami v Pythonu od lukyha - Super článek! Jen pár výhrad bych měl. S využitím...

  • Článek je starý, nové názory již nelze přidávat.
  • 22. 12. 2024 21:10

    lukyha
    Super článek! Jen pár výhrad bych měl.


    S využitím znaků b, h, i, l, q lze volit počet bajtů pro uložení celočíselné hodnoty. Postupně se jedná o 8, 16, 32, 64 a 128 bitů.

    ... mi nepřijde zcela validní. Na 64-bitovém pythonu nativně 128-bit integer asi nedostaneme. Nakonec i ve výstupu demonstračního skriptu více než 8 bajtů není.

    Rovněž by bylo dobré zmínit, že pokud není specifikovaná indianita/nativita tak platí že je použito nativního uspořádání bajtů, velikosti typů a zarovnání v "céčkovské" struktuře (proto taky ten název modulu struct). V takovém případě se může použít (ale nemusí) speciální znak "@". Pozor, ten má však jiný význam než v příkladech používaný "=". Při použití druhého zmiňovaného se nepoužije nativní velikosti nýbrž tzv. standardní což se ale obecně uplatňuje pro všechny případy krom "@" (viz. https://docs.python.org/3/library/struct.html#struct-alignment a https://docs.python.org/3/library/struct.html#format-characters), tedy i pro "<", ">" nebo "!". Rozdíl v chování pak lze jednoduše ověřit např.

    >>> print(struct.pack("@l", 42).hex(" ", 1))
    2a 00 00 00 00 00 00 00
    >>> print(struct.pack("l", 42).hex(" ", 1)) # To samé jako s použitím "@"
    2a 00 00 00 00 00 00 00
    >>> print(struct.pack("=l", 42).hex(" ", 1)) # Standardní velikost
    2a 00 00 00 
  • 22. 12. 2024 21:28

    Pavel Tišnovský
    Zlatý podporovatel

    Díky za doplnění. Zrovna k tomu @ jsem se chtěl ještě vrátit a ukázat využití, když se volá céčkový kód (a ne když se pracuje spíše s binárními soubory). Samozřejmě máš pravdu.

    Ta šířka: jo tam je to složitější, protože na x86-64 bude "l" stejně široké jako "q", ale jinde to může být tak, že "i" bude stejně široké jako "l", ale "q" bude dvakrát tak širší. Hmm 128bitů pro "q" jsem ale taky vlastně neviděl, i když teoreticky to možné je.