Як конвертувати необроблені значення у Big-Endian у Python

Як конвертувати необроблені значення у 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 інші розміри цілих чисел?

У цьому FOSS збірці BigEndianBitConverter надає лише to_int32 — для 16-бітових або 64-бітових значень у big-endian форматі розкодуйте байти вручну за допомогою Python’s built-in int.from_bytes(data, byteorder="big").

Чи потрібен це для звичайного редагування документів?

Ні — BigEndianBitConverter є низькорівневою утилітою для роботи з необробленими байтами, які ви отримали самостійно (наприклад, з нерозпізнаного ресурсного зображення). Типове завантаження, редагування та збереження (див. Робота з ядром API).

Дивіться також

 Українська