2012-05-03 12 views
5

Analizuję zestaw skryptów Pythona i natknąłem się na ten fragment. Nie jestem pewien, czy moja interpretacja jest poprawna, ponieważ nie spotkałem żadnego podobnego kodu C lub Java i nie znam Pythona.Sprawdź, czy moja interpretacja tego fragmentu kodu Pythona jest poprawna

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

Moja interpretacja idzie tak:

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 

Zasadniczo myślę oryginalna praca rozpakować wydobywa 8 bajtów, zrzuca 4 z nich jako unsigned long, a następnie dodaje resztę w porządku sekwencyjnym do zmienne *.

+3

To wydaje się być całkowicie poprawne (z wyjątkiem literówki? A3 jest przesunięte w lewo, a nie w prawo). –

+0

Wygląda dobrze dla mnie. Z wyjątkiem lewej/prawej rzeczy, która @NiklasB. uznany. –

+0

tak. więc jest to w zasadzie 4-bajtowa int, bajt i 3-bajtowa int. –

Odpowiedz

0

Tak, Twoja interpretacja jest prawidłowa.