View Categories

11.3. العمل مع تخطيطات سجلات البيانات الثنائية

< 1 دقيقة

11.3. العمل مع تخطيطات سجلات البيانات الثنائية #

توفر وحدة struct دالتي pack() وunpack() للعمل مع تنسيقات السجلات الثنائية متغيرة الطول. يوضح المثال التالي كيفية تكرار معلومات الرأس في ملف ZIP دون استخدام وحدة zipfile. رمزا الحزمة “H” و”I” يمثلان أرقامًا غير موقعة ثنائية البايت وأربعة بايتات على التوالي. يشير الرمز “<” إلى أنهما بحجم قياسي وبترتيب بايتات صغير:

import struct
with open('myfile.zip', 'rb') as f:
    data = f.read()
start = 0
for i in range(3):                      # show the first 3 file headers
    start += 14
    fields = struct.unpack('<IIIHH', data[start:start+16])
    crc32, comp_size, uncomp_size, filenamesize, extra_size = fields
    start += 16
    filename = data[start:start+filenamesize]
    start += filenamesize
    extra = data[start:start+extra_size]
    print(filename, hex(crc32), comp_size, uncomp_size)
    start += extra_size + comp_size     # skip to the next header
error: Content is protected !!
Scroll to Top