2012-05-03 13 views
5

Bir python betiği kümesini analiz ediyorum ve bu snippet'e rastladım. Benzer bir C veya Java koduna rastlamadığımdan ve Python'u bilmediğimden, yorumumun doğru olup olmadığından emin değilim.Bu python kod snippet'inin yorumunun doğru olduğunu doğrulayın.

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

Benim çevirim şöyledir:

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 

Esasen, ben daha sonra sırayla kalanını ekler, orijinal paketten operasyonu imzasız sürece 4 tanesi döker, 8 bayt ayıklar düşünüyorum a * değişkenleri.

+3

Bu doğru gibi görünüyor (yazım hatası? A3 hariç sola kaydırılır, sağa değil). –

+0

Bana doğru görünüyor. @NiklasB'nin sol/sağ dışında. buldum. –

+0

yup. Yani temelde bir 4 bayt int, bir bayt ve bir 3 bayt int. –

cevap

0

Evet, yorumun doğru.