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-fossKrok 2: Naimportujte požadované třídy
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverterKrok 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.dataKrok 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}") # 1040to_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.