Jak przekonwertować surowe wartości Big-Endian w Python

Jak przekonwertować surowe wartości Big-Endian w Python

Pliki PSD przechowują większość pól binarnych w kolejności bajtów big-endian. Kiedy musisz samodzielnie zdekodować surowe pole — na przykład z surowych bajtów zasobu obrazu — BigEndianBitConverter odczytuje 32-bitową liczbę całkowitą big-endian bezpośrednio z tablicy bajtów.

Przewodnik krok po kroku

Krok 1: Zainstaluj pakiet

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

Krok 2: Zaimportuj wymagane klasy

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverter

Krok 3: Odczytaj surowe bajty zasobu

PsdImage.parsed_resources zwraca niższego poziomu obiekty UnknownResource, z których każdy udostępnia surowe dane za pośrednictwem data:

image = PsdImage.load("input.psd")

for resource in image.parsed_resources:
    raw = resource.data

Krok 4: Dekodowanie 32-bitowej wartości 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) odczytuje 4 bajty zaczynając od offset i łączy je w kolejności od najważniejszego bajtu.

Typowe problemy i rozwiązania

IndexError przy wywoływaniu to_int32. Tablica bajtów musi mieć przynajmniej 4 bajty dostępne począwszy od offset — sprawdź len(byte_array) >= offset + 4 przed wywołaniem.

Wartości wyglądają na zamienione bajtowo. Upewnij się, że nie używasz przypadkowo konwersji little-endian w innym miejscu swojego kodu — zasoby PSD i pola nagłówka są konsekwentnie big-endian, co dokładnie BigEndianBitConverter zakłada.

Najczęściej zadawane pytania

Czy BigEndianBitConverter obsługuje inne rozmiary liczb całkowitych?

W tej wersji FOSS, BigEndianBitConverter zapewnia jedynie to_int32 — dla wartości 16-bitowych lub 64-bitowych big-endian, dekoduj bajty ręcznie przy użyciu wbudowanego w Python int.from_bytes(data, byteorder="big").

Czy potrzebuję tego przy normalnej edycji dokumentów?

Nie — BigEndianBitConverter jest niskopoziomowym narzędziem do pracy z surowymi bajtami, które samodzielnie pozyskałeś (na przykład z nierozpoznanego zasobu obrazu). Typowe ładowanie, edycja i zapisywanie (zobacz Praca z rdzeniem API) nigdy nie wymaga go bezpośrednio.

Zobacz także

 Polski