私は一連の python スクリプトを分析していて、このスニペットに出会いました。似たような C や Java のコードに出くわしたことがなく、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 つを unsigned long としてダンプし、残りを順番に a* 変数に追加すると思います。