2012-05-03 7 views
5

Estoy analizando un conjunto de scripts de Python y encontré este fragmento. No estoy seguro de si mi interpretación es correcta, ya que no he encontrado ningún código C o Java similar y no conozco Python.Verificar que mi interpretación de este fragmento de código python es correcta

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)) 

Mi interpretación es la siguiente:

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 

Esencialmente, creo que la operación de deshacer las maletas originales extractos de 8 bytes, vertederos 4 de ellos como un largo sin signo, a continuación, añade el resto en orden secuencial para el a * variables.

+3

Eso parece perfectamente correcto (a excepción de un error tipográfico 3 se desplaza a la izquierda, no a la derecha). –

+0

me parece correcto. Excepto por la izquierda/derecha que @NiklasB. encontró. –

+0

yup. por lo que básicamente es un int de 4 bytes, un byte y un int de 3 bytes. –

Respuesta

0

Sí, su interpretación es correcta.

Cuestiones relacionadas