Come convertire valori raw big-endian in Python
I file PSD memorizzano la maggior parte dei campi binari in ordine di byte big-endian. Quando è necessario decodificare un campo raw da soli — ad esempio, dai byte raw di una risorsa immagine — BigEndianBitConverter legge un intero a 32-bit big-endian direttamente da un array di byte.
Guida passo-passo
Passo 1: Installa il pacchetto
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:$PYTHONPATHPasso 2: Importa le classi necessarie
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverterPasso 3: Leggi i byte raw di una risorsa
PsdImage.parsed_resources restituisce gli oggetti UnknownResource di livello inferiore, ognuno dei quali espone il payload grezzo tramite data:
image = PsdImage.load("input.psd")
for resource in image.parsed_resources:
raw = resource.dataPasso 4: Decodifica un valore a 32 bit 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) legge 4 byte a partire da offset e li combina con il byte più significativo per primo.
Problemi comuni e soluzioni
IndexError quando si chiama to_int32. L’array di byte deve avere almeno 4 byte disponibili a partire da offset — verifica len(byte_array) >= offset + 4 prima di chiamare.
I valori sembrano byte-swapped. Conferma di non utilizzare accidentalmente una conversione little-endian altrove nel tuo codice — le risorse PSD e i campi dell’intestazione sono costantemente big-endian, che è esattamente ciò che BigEndianBitConverter presuppone.
Domande frequenti
BigEndianBitConverter supporta altre dimensioni di interi?
In questa build FOSS, BigEndianBitConverter fornisce solo to_int32 — per valori big-endian a 16 bit o 64 bit, decodifica i byte manualmente con il int.from_bytes(data, byteorder="big") integrato di Python.
Mi serve questo per la normale modifica dei documenti?
No — BigEndianBitConverter è un’utilità di basso livello per lavorare con byte grezzi che hai ottenuto tu stesso (ad esempio, da una risorsa immagine non riconosciuta). Il caricamento, la modifica e il salvataggio tipici (vedi Lavorare con il Core API) non lo richiede mai direttamente.