Jak převést surové hodnoty big-endian v Python

Jak převést surové hodnoty big-endian v Python

Soubory PSD ukládají většinu binárních polí v pořadí bajtů big-endian. Když potřebujete sami dekódovat surové pole — například ze surových bajtů obrazového zdroje — BigEndianBitConverter načte 32-bitové celé číslo v big-endian přímo z byte array.

Průvodce krok za krokem

Krok 1: Nainstalujte balíček

pip install aspose-psd-foss

Krok 2: Naimportujte požadované třídy

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

Krok 3: Přečtěte surové bajty zdroje

PsdImage.parsed_resources vrací níže úrovňové objekty UnknownResource, z nichž každý vystavuje surový payload prostřednictvím data:

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

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

Krok 4: Dekódovat 32-bitovou hodnotu 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) načte 4 bajty počínaje na offset a kombinuje je v pořadí nejvýznamnější bajt první.

Časté problémy a opravy

IndexError při volání to_int32. Pole bajtů musí mít alespoň 4 bajty k dispozici počínaje na offset — zkontrolujte len(byte_array) >= offset + 4 před voláním.

Hodnoty vypadají byte-swapped. Ujistěte se, že náhodou nepoužíváte little-endian konverzi jinde ve svém kódu — PSD zdroje a pole hlavičky jsou konzistentně big-endian, což je přesně to, co BigEndianBitConverter předpokládá.

Často kladené otázky

Podporuje BigEndianBitConverter jiné velikosti celých čísel?

V tomto FOSS buildu, BigEndianBitConverter poskytuje pouze to_int32 — pro 16-bitové nebo 64-bitové big-endian hodnoty dekódujte bajty ručně pomocí vestavěného int.from_bytes(data, byteorder="big") v Python.

Potřebuji to pro běžnou úpravu dokumentů?

Ne — BigEndianBitConverter je nízkoúrovňový nástroj pro práci s raw bajty, které jste si získali sami (například z nerozpoznaného obrázkového zdroje). Typické načítání, úpravy a ukládání (viz Práce s jádrem API) nikdy to nevyžaduje přímo.

Viz také:

 Čeština