כיצד להמיר ערכי Raw Big-Endian ב-Python
קבצי PSD מאחסנים את רוב השדות הבינריים בסדר ביתים big-endian. כאשר אתה צריך לפענח שדה גולמי בעצמך — למשל, מבייטים גולמיים של משאב תמונה — BigEndianBitConverter קורא מספר שלם 32-ביט big-endian ישירות ממערך בייטים.
מדריך שלב-אחר-שלב
שלב 1: התקנת החבילה
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATHשלב 2: ייבוא המחלקות הנדרשות
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverterשלב 3: קריאת הבייטים הגולמיים של המשאב
PsdImage.parsed_resources מחזיר את האובייקטים UnknownResource ברמה נמוכה יותר, שכל אחד חושף את המטען הגולמי דרך data:
image = PsdImage.load("input.psd")
for resource in image.parsed_resources:
raw = resource.dataשלב 4: פענוח ערך של 32-ביט Big-Endian
data = bytes([0x00, 0x00, 0x04, 0x10]) # example 4-byte big-endian field
value = BigEndianBitConverter.to_int32(data, 0)
print(f"Decoded value: {value}") # 1040to_int32(byte_array, offset) קורא 4 בתים שמתחילים ב-offset ומשלב אותם בסדר שבו הבייט המשמעותי ביותר ראשון.
בעיות נפוצות ותיקונים
IndexError בקריאה to_int32. מערך הבתים חייב להכיל לפחות 4 בתים זמינים החל מ offset — לבדוק len(byte_array) >= offset + 4 לפני הקריאה.
הערכים נראים כאילו הבייטים הוחלפו. אשר שאתה לא משתמש בטעות בהמרה little-endian במקומות אחרים בקוד שלך — משאבי PSD ושדות הכותרת הם באופן עקבי big-endian, וזה בדיוק מה BigEndianBitConverter מניח.
שאלות נפוצות
האם BigEndianBitConverter תומך בגודלים אחרים של שלמים?
בגרסה זו של קוד פתוח, BigEndianBitConverter מספק רק את to_int32 — עבור ערכי 16-ביט או 64-ביט ב-big-endian, פענח את הבתים ידנית באמצעות int.from_bytes(data, byteorder="big") המובנה של Python.
האם אני צריך את זה לעריכת מסמכים רגילה?
לא — BigEndianBitConverter הוא כלי ברמת נמוכה לעבודה עם בתים גולמיים שהשגת בעצמך (למשל, ממקור תמונה לא מזוהה). טעינה, עריכה ושמירה רגילים (ראו עבודה עם הליבה API) אף פעם לא דורש זאת באופן ישיר.