Як конвертувати необроблені значення у 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 інші розміри цілих чисел?
У цьому FOSS збірці BigEndianBitConverter надає лише to_int32 — для 16-бітових або 64-бітових значень у big-endian форматі розкодуйте байти вручну за допомогою Python’s built-in int.from_bytes(data, byteorder="big").
Чи потрібен це для звичайного редагування документів?
Ні — BigEndianBitConverter є низькорівневою утилітою для роботи з необробленими байтами, які ви отримали самостійно (наприклад, з нерозпізнаного ресурсного зображення). Типове завантаження, редагування та збереження (див. Робота з ядром API).