2012-05-03 24 views
5

मैं पाइथन स्क्रिप्ट का एक सेट का विश्लेषण कर रहा हूं और इस स्निपेट में आया हूं। मुझे यकीन नहीं है कि मेरी व्याख्या सही है, क्योंकि मैं किसी भी समान सी या जावा कोड में नहीं आया हूं और मुझे पायथन नहीं पता है।इस पायथन कोड स्निपेट की मेरी व्याख्या सत्यापित करें

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

मेरे व्याख्या इस प्रकार है: अनिवार्य रूप से

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 

, मैं मूल खोल आपरेशन 8 बाइट्स निकालता है, एक अहस्ताक्षरित लंबे समय के रूप में उनमें से 4 उदासीनता लगता है, तो करने के लिए अनुक्रमिक क्रम में बाकी कहते हैं एक * चर।

+3

यह बिल्कुल सही लगता है (एक टाइपो को छोड़कर? ए 3 को बाएं स्थानांतरित किया गया है, सही नहीं)। –

+0

मुझे सही लगता है। बाएं/दाएं चीज़ को छोड़कर @NiklasB। मिल गया। –

+0

yup। तो यह मूल रूप से एक 4 बाइट int, एक बाइट, और एक 3 बाइट int है। –

उत्तर

0

हां, आपकी व्याख्या सही है।