כיצד להמיר ערכי Raw Big-Endian ב-Python

כיצד להמיר ערכי 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}")  # 1040

to_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) אף פעם לא דורש זאת באופן ישיר.

ראה גם

 עברית