2012-05-03 2 views
5

Я анализирую набор сценариев python и наткнулся на этот фрагмент. Я не уверен, что моя интерпретация верна, так как я не сталкивался с похожими C или Java-кодами, и я не знаю Python.Проверьте, что моя интерпретация этого фрагмента кода на Python верна

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 из них, как неподписанных долго, а затем добавляет все остальное в последовательном порядке к a * переменных.

+3

Это кажется совершенно правильным (за исключением опечатки? A3 сдвинуто влево, а не вправо). –

+0

Выглядит прямо ко мне. За исключением левой/правой вещи, которая @NiklasB. найденный. –

+0

yup. поэтому в основном это 4 байта int, байт и 3 байта int. –

ответ

0

Да, ваша интерпретация верна.

Смежные вопросы