2012-05-03 32 views
5

Tôi đang phân tích tập hợp các tập lệnh python và đã xem đoạn mã này. Tôi không chắc liệu cách diễn giải của tôi có chính xác hay không, vì tôi chưa từng gặp bất kỳ mã C hoặc Java tương tự nào và tôi không biết Python.Xác minh giải thích của tôi về đoạn mã python này là chính xác

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

giải thích của tôi đi như thế này:

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 

Về cơ bản, tôi nghĩ rằng các hoạt động giải nén gốc chiết xuất 8 byte, bãi 4 trong số họ là một unsigned long, sau đó thêm phần còn lại theo thứ tự tuần tự đến a * biến.

+3

Điều đó có vẻ hoàn toàn chính xác (ngoại trừ lỗi đánh máy? A3 được dịch chuyển sang trái, không phải). –

+0

Có vẻ phù hợp với tôi. Ngoại trừ điều trái/phải mà @NiklasB. tìm. –

+0

yup. do đó, về cơ bản nó là một int 4 byte, một byte, và một int 3 byte. –

Trả lời

0

Có, cách diễn giải của bạn là chính xác.

Các vấn đề liên quan