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.
Bu doğru gibi görünüyor (yazım hatası? A3 hariç sola kaydırılır, sağa değil). –
Bana doğru görünüyor. @NiklasB'nin sol/sağ dışında. buldum. –
yup. Yani temelde bir 4 bayt int, bir bayt ve bir 3 bayt int. –