چگونه مقادیر 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}") # 1040to_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).