2012-05-03 10 views
5

Sto analizzando un set di script Python e ho trovato questo snippet. Non sono sicuro che la mia interpretazione sia corretta, dal momento che non ho riscontrato alcun codice C o Java simile e non conosco Python.Verificare che la mia interpretazione di questo frammento di codice Python sia corretta

for i in xrange(self.num_sections): 
     offset, a1,a2,a3,a4 = struct.unpack('>LBBBB', self.data_file[78+i*8:78+i*8+8]) 
     flags, val = a1, a2<<16|a3<<8|a4 
     self.sections.append((offset, flags, val)) 

La mia interpretazione è questa:

for each item in num_sections 
    convert the data_file range into a big-endian unsigned long, and 4 unsigned char 
    insert unpacked values into offset, a1, a2, a3 and a4 variables 

    set flags to = a1 
    set val to a2 shifted left 16 bits then OR'd with a3 shifted right 8 bits 
    then OR'd with a4 

In sostanza, credo che l'operazione di decompressione originale estrae 8 byte, discariche 4 di loro come un unsigned long, aggiunge poi il resto in ordine sequenziale al a * variabili.

+3

Sembra perfettamente corretto (ad eccezione di un errore di battitura? A3 viene spostato a sinistra, non a destra). –

+0

Mi sembra giusto. Tranne la cosa sinistra/destra che @NiklasB. trovato. –

+0

sì. quindi è fondamentalmente un int 4 byte, un byte e un int 3 byte. –

risposta

0

Sì, la tua interpretazione è corretta.

Problemi correlati