[python] Chyba v modulu struct

Radek Kaňovský rk na dat.cz
Úterý Prosinec 6 16:19:58 CET 2005


On Tue, Dec 06, 2005 at 12:56:39PM +0100, Jan Troler wrote:

> Ahoj Vsem,
> narazil jsem na nasledujici chovani modulu struct:
> 
> In [12]: struct.pack('HI',8,1), struct.calcsize('HI')
> Out[12]: ('\x08\x00\x00\x00\x01\x00\x00\x00', 8)
> 
> In [13]: struct.pack('IH',8,1), struct.calcsize('IH')
> Out[13]: ('\x08\x00\x00\x00\x01\x00', 6)
> 
> Je videt, ze formatovy retezec 'HI' a 'IH' dava rozdilny vysledek.
> Zkouseno na Python 2.3.4. Vite o tom nekdo neco?

Souvisi to s tim, ze s pomoci 'struct' by melo byt mozne "rozparsovat"
C-ckovske struktury. Kvuli rychlosti pristupu uklada vetsina kompilatoru
jedno a dvoubajtove cleny C-struktur do ctyr bajtu (na 32-bitovych
platformach) s tim, ze struktury obsahuji nevyuzite misto. Pokud je
takovy clen na konci, tak se to neprojevi. Pokud je takovych clenu vic
za sebou, seskupi se do jedne ctyrbajtove bunky:

    >>> struct.pack('HHI',8,1,1), struct.calcsize('HHI')
    ('\x08\x00\x01\x00\x01\x00\x00\x00', 8)

Radek Kaňovský



Další informace o konferenci Python