Come convertire valori raw big-endian in Python

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:$PYTHONPATH

Passo 2: Importa le classi necessarie

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

Passo 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.data

Passo 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}")  # 1040

to_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.

Vedi anche

 Italiano