2012-05-03 6 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 

を基本的に、私はその後に順番に残りの部分を追加し、オリジナルのアンパック操作はunsigned long型としてそれらの4をダンプし、8つのバイトを抽出し、考えます変数*

+3

これは完全に正しいと思われます(誤字を除くと、a3は左にシフトされ、右にはシフトされません)。 –

+0

私に見えます。 @ NiklasBの左/右のものを除いて。見つかりました。 –

+0

基本的に4バイトのint、1バイト、3バイトのintです。 –

答えて

0

はい、あなたの解釈は正しいです。

関連する問題