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.
Eso parece perfectamente correcto (a excepción de un error tipográfico 3 se desplaza a la izquierda, no a la derecha). –
me parece correcto. Excepto por la izquierda/derecha que @NiklasB. encontró. –
yup. por lo que básicamente es un int de 4 bytes, un byte y un int de 3 bytes. –