چگونه مقادیر 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-Bit 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. آرایه بایت باید حداقل ۴ بایت در دسترس داشته باشد که از offset — بررسی کنید len(byte_array) >= offset + 4 قبل از فراخوانی.

به نظر می‌رسد مقادیر byte-swapped هستند. تأیید کنید که به‌طور تصادفی از تبدیل little-endian در جایی دیگر از کد خود استفاده نمی‌کنید — منابع PSD و فیلدهای هدر به‌طور ثابت big-endian هستند، که دقیقاً همان چیزی است که BigEndianBitConverter فرض می‌کند.

سوالات متداول

آیا BigEndianBitConverter از اندازه‌های دیگر عدد صحیح پشتیبانی می‌کند؟

در این ساختار متن‌باز، BigEndianBitConverter فقط to_int32 را فراهم می‌کند — برای مقادیر 16-بیتی یا 64-بیتی با اندین بزرگ، بایت‌ها را به‌صورت دستی با Python داخلی int.from_bytes(data, byteorder="big") رمزگشایی کنید.

آیا برای ویرایش عادی سند به این نیاز دارم؟

نه — BigEndianBitConverter یک ابزار سطح پایین برای کار با بایت‌های خامی است که خودتان به دست آورده‌اید (مثلاً از منبع تصویری ناشناخته). بارگذاری، ویرایش و ذخیره‌سازی معمولی (نگاه کنید به کار با هسته API).

همچنین ببینید:

 فارسی